![]() |
Zugriffsrechte von Dateien ändern
Hi,
ich hoffe ich bin hier richtig bei "Win32/64 API". Also, folgendes ist mein Problem. Ich schreibe an einem Programm, dass gern Einstellungen in einer Ini-Datei speichert. Ich würde gern diese Ini-Datei im Windows Common_Appdata_Folder lesen und schreiben. Sinnvoller Weise soll diese Datei natürlich deswegen in den Common_Appdata_Folder, weil ich mit allen vorhanden Windows Usern darauf zugreifen können möchte. Eigentlich alles ganz easy und vor allem standart. Nun ist es aber so, dass ich die betreffenden Dateien nicht per Setup installieren kann, sondern sie beim ersten Start des Programms neu erstellen muss. Wenn ich nun das Programm mit Administratorrechten installiere, und auch mit genau diesem Nutzer zum ersten mal starte, erstellt der die Datei mit Zugriffsrechten, die sehr eingeschränkt sind, und die ich vor allem nicht beeinflussen kann. Wenn ich nun das Programm mit einem anderen Nutzer starte, kann die Datei nicht bearbeitet werden. Die Datei in den User_Appdata_Folder zu packen ist leider nicht praktikabel! Viel zu lange Rede, recht kurzer Sinn. Ich habe es immerhin schon geschafft, die Zugriffsrechte von Dateien zu ändern. Ich kann also nach dem erstellen der Datei die Zugriffsrechte beispielsweise so ändern, dass "Jeder" vollen Zugriff hat. Das habe ich unter Verwendung dieser kleinen Hilfe geschafft: ![]() Mein Problem ist nun, dass ich das unabhängig von der Region tun muss, in der der Computer steht. Die Gruppennamen für Zugriffsrechte haben so schön regionale Namen, wie "User" / "Bentzer", "Jeder" / "Everybody", usw. Das ganze natürlich in allen möglichen Sprachen. Mir fehlt also die Möglichkeit, die Datei für die allumfassende Gruppe "Jeder" unabhängig von der Sprache schreibbar zu machen. Kennt wer eine tolle Variable, der die lokale Gruppe "Jeder" beschreibt. Oder gibt es eine Möglichkeit, sich den String zu holen. Oder hat wer eine ganz andere Idee? Dank schon mal. |
AW: Zugriffsrechte von Dateien ändern
Hallo,
kannst Du nicht eine Dummy-Ini Datei vom Setup Programm installieren lassen. Das hätte auch den Vorteil das die Ini-Datei bei ein Deinstalltion mit entfernt wird. Grüße Klaus |
AW: Zugriffsrechte von Dateien ändern
Also erstens: Zugriffsrechte öffnet man nur so weit, wie es unbedingt notwendig ist, nicht so weit wie es geht. "Jeder" mit Vollzugriff auszustatten, ist absoluter Unsinn! Ich habe mich bereits mehrfach hier im Forum dazu ausgelassen, daher spare ich mir das an dieser Stelle; trotzdem kann man das nicht oft genug erwähnen, weil dieser Nonsens seit Jahren durchs Netz geistert und von "allen" (oft gedankenlos) benutzt wird.
Zweitens: Jeder Benutzer und jede Gruppe hat einen sogenannten SID (Security Identifier). Diese sind eineindeutig für jedes System. Diese Benutzer(gruppen), auf die du hinaus willst, haben ebenfalls einen SID, diese sind immer gleich. Von MS werden die als ![]() MfG Dalai |
AW: Zugriffsrechte von Dateien ändern
Dalai's Ausführungen ist kaum etwas hinzu zu fügen, außer zumindestens mein Rechner hat von einem Admin eine solche Konfiguration bekommen, daß ich als Benutzer problemlos ein Verzeichnis unter "ProgramData" anlegen kann und ich kann dort auch problemlos schreiben. Dies gilt ebenso für alle anderen Benutzer, die sich auf dem Rechner einloggen können.
Sollte dies nicht möglich sein, besteht die entfernte Möglichkeit, daß da sich jemand etwas bei gedacht hat. In solchen Fällen wäre es ein Gebot der Höflichkeit, den Benutzer darauf hinzuweisen, daß das Programm ein Verzeichnis/Datei benötigt und er diese doch bitte anlegen soll, bzw. seinen Admin informieren soll. Programmierer/Softwarevertreiber die mit der Brechstange versuchen ihre Vorstellungen durchzusetzen machen sich auf Dauer mit solchen Aktionen nicht sehr beliebt. Gruß K-H |
AW: Zugriffsrechte von Dateien ändern
Getestet mit XE7, WIN8.1 - Everyone wird überall verstanden.
Delphi-Quellcode:
// uses WinApi.ACCCTRL, WinApi.ACLAPI,
procedure TForm1.Button1Click(Sender: TObject); var TmpString: String; pSD : Pointer; NewDacl, OldDacl: PACl; EA: array [0..5] of EXPLICIT_ACCESS; ret : Cardinal; begin ret:= 1; TmpString := 'F:\TEST.txt'; GetNamedSecurityInfo(PChar(TmpString), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @OldDacl, nil, pSD); BuildExplicitAccessWithName(@EA, PChar('Everyone'), GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); SetEntriesInAcl(1, @EA, OldDacl, NewDacl); ret:= SetNamedSecurityInfo(PChar(TmpString), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, NewDacl, nil); if ret= ERROR_SUCCESS then ShowMessage('Bei diesem Objekt wurden keine Objekttypen zugeordnet.'+#13#10+ 'Achtung: Dies ist ein mögliches Sicherheitsrisiko, weil jeder,'+#13#10+ 'der Zugriff auf dieses Objekt hat, dieses besitzen kann.'+#13#10+ 'Der Besitzer dieses Objekts sollte so bald wie möglich'+#13#10+ 'Berechtigungen zuordnen.'); end; |
AW: Zugriffsrechte von Dateien ändern
Man sollte damit allerdings vorsichtig sein. Solche Aktionen werden von einigen Virenscannern erkannt und Programme entsprechend per Verhaltensanalyse als Virus oder "potentiell unterwünschtes Programm" eingestuft. (Das haben wir selbst schon gehabt, in dem Fall bei den Zugriffsrechten auf einen Registry-Schlüssel.) Ausnahme sind dabei Setups, dabei werden solche Aktionen offenbar eher erwartet.
Deshalb haben wir dies mittlerweile auch anders gelöst. Bei uns war das nicht so einfach, aber gerade bei Einstellungen ist es in der Regel doch ohnehin nicht erwünscht, dass ein Benutzer die Einstellungen des anderen Benutzers kaputt macht?! |
AW: Zugriffsrechte von Dateien ändern
Danke für die Anteilnahme. Eure Bedenken nehme ich zur Kenntniss. :D
Zuerstmal. Recht haste @Dalai. Ich versuche "Jeder" zu vermeiden. Aber um den Fakt, dass jeder Benutzer auf dem PC Schreibrechte auf dieser Datei braucht, komm ich nicht rum. Es handelt sich um eine Software zum betreiben eines recht komplexen Systems. Verschiedene Einstellungen für verschiedene Nutzer würden zu einem extremen Durcheinander führen. @P80286 Der ProgramData Ordner ist ja genau für sowas da. Wenn ich per Hand dort eine Datei erstelle, hat diese auch großzügige Zugriffrechte. Nur wenn ich sie aus dem Programm erstelle, taucht das Problem auf. Ich habe nicht vor die Brechstange rauszuholen. Höchstens ganz kurz. :D Über kurz oder lang wird das Problem hoffentlich mit dem Setup gelößt. |
AW: Zugriffsrechte von Dateien ändern
Zitat:
Aber warum startest Du das Programm dann bei 1. mal mit Admin-Rechten? Mavarik |
AW: Zugriffsrechte von Dateien ändern
Da steht weder, dass ich Adminrechte zur installation brauche, noch dass ich das Programm mit Adminrechten starte. Da steht auch nicht, dass ich das muss. ;)
Wenn ich als Nutzer mit Adminrechten angemeldet bin, heißt das ja nicht, dass jedes Programm automatisch mit Adminrechten ausgeführt wird. Ich wollte nur nicht, dass die ersten Antworten lauten: "Probiers mal mit Adminrechten", oder so. Es war einfach ein Szenario. |
AW: Zugriffsrechte von Dateien ändern
Nur als Hinweis:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz