Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Speicherorte unter Windows (https://www.delphipraxis.net/90803-speicherorte-unter-windows.html)

cytrinox 24. Apr 2007 08:33


Speicherorte unter Windows
 
Hi,

ich hab da mal eine generelle Frage an alle Entwickler unter Windows.

Gibt es irgendwo eine Liste in der sich klar ablesen lässt, in welchem Verzeichnis eine bestimmte Gruppe von Daten abgespeichert werden können?

Ich hab viel unter Linux programmiert, ich weiß dass ich programmbezogene Einstellungen in /etc/ abspeichere und benutzerbezogene in ~/.prgname/. Zumindest würden mir viele zustimmen dass dieser Weg doch recht sauber ist.

Unter Windows hab ich das Problem, dass ich zum einen programmbezogene Einstellungen hab die in der Registry gespeichert werden sollen sowie programmbezogene Daten die irgendwo auf der Festplatte gespeichert sollen.

Da aber generell jeder User einer Windows Kiste lesenden und schreibenden Zugriff auf die Konfiguration sowie die Daten braucht, bin ich mittlerweile überfragt wohin damit.

Als Beispiel mal die Konfigurationen: Ich dachte HKEY_LOCAL_MACHINE\Software wäre ideal, da alles andere benutzerbezogen ist.
Jetzt merk ich dass unter Vista (UAC zeugs) der Zugriff virtualisiert und irgendo umgebogen wird.

Da fliegt mir jetzt natürlich so ziemlich jedes System um die Ohren auf dem mehrere Admins, Hauptbenutzer und Eingeschränkte Benutzer tätig sind.

Daten sind auch so eine Sache: C:\Dokumente und Einstellungen\All Users\ klingt ja genau nach dem was ich suche - dumm an der Sache ist nur dass eingeschränkte Benutzer da mal wieder keinen schreibenden Zugriff drauf haben.

Bei einer Datenbankdatei die da drin lingt und von alles Usern benutzt werden soll sind da Fehlermeldungen natürlich vorprogrammiert.


Ich würde dieses ganze Zeug gern mal richtig abspeichern... :wall:

uwewo 24. Apr 2007 08:48

Re: Speicherorte unter Windows
 
Lies mal diesen Thread

cytrinox 24. Apr 2007 09:01

Re: Speicherorte unter Windows
 
Zitat:

Zitat von alcaeus
Zitat:

Zitat von Luckie
Zitat:

Zitat von mkinzler
oder lege die Ini unter ALLUSERS ab.

Ich weiß ja nicht, wie es unter Vista ist, aber unter Windows XP kann man las normaler Bneutzer im ALLUSERS Profil auch nicht schreiben.

Er meinte ja auch vom Installer aus - der wie erwaehnt mit Admin-Rechten laeuft :)

Greetz
alcaeus

Der Thread faselt über 2 Seiten genau das was ich beschrieben hab. All Users ist nur mit Adminrechten beschreibbar, Im Programm Verzeichnis darf nichts mehr abgelegt werden (find ich ok!) und das was in der Registry landet wird unter Vista virtualisiert.

Aber wo man die Daten abspeichern soll steht da nicht. Der einzige Lösungsvorschlag der kam, war den Installer mit Adminrechten starten zu lassen (mach ich übrigens auch).

Aber hinterher bringt mir das nichts mehr weil die Datenbank die bei der Installation abgelegt wird muss natürlich danach immer noch für "ALLE BENUTZER" schreibbar sein. Genauso wie die Registrierungsinfos die in der Registry abgelegt werden sollen...
Wenn sich Benutzer A anmeldet, Programm startet und die Registrierungsinfos eintippt, dann braucht die auch der Benutzer B, und C und D.

Kann nicht angehen dass ich einem Kunden mit 30 aktiven Systembenutzern beibringen muss, die Registrierungsinfo 30x einzutippen weil Vista die hintenrum tunnelt.

Luckie 24. Apr 2007 09:10

Re: Speicherorte unter Windows
 
Benutzerübergreifende Einstellungen: HKLM / AllUsers
Benutzerspezifische Einstellungen: HKCU / Benutzerverzeichnis

Und wenn das Programm mit Administratorenrechten läuft, dann wird da auch nichts umgebogen. Also Programm mit Adminrechten starten und die benutzerübergreifende Konfiguration machen und dann mit dem Programm als normaler Benutzer arbeiten.

cytrinox 24. Apr 2007 09:29

Re: Speicherorte unter Windows
 
Und wo sollen die ganzen Datenbankdateien hin? Formular-Dateien? Reports?

Und generell gesagt: Adminrechte kann man abhaken, z.b. kann ein Benutzer einen neuen Transferpfad angeben, der muss für alle anderen Benutzer gelten. Oder er kann sich endlich dazu entschließen die Registrierungsinfos einzutippen. Oder vielleicht den Organistaionsnamen abändern. Oder oder oder.. da werd ich erschossen wenn ich da jedesmal das Administrator-Passwort verlangen würde...

Edit: und HKLM / AllUsers gibts bei mir nicht (winXP SP2)
Darf man das anlegen? Ich denk mal nicht, denn wenn AllUsers besondere Rechte hätte wärs standardmäßig schon da. Und wenn doch, wie muss die Struktur darunter aussehen? AllUsers\Software\Hersteller\Produkt?

Robert Marquardt 24. Apr 2007 09:39

Re: Speicherorte unter Windows
 
Ich glaube jetzt verstehst du wofuer "User, Gruppe, Alle" bei den Dateirechten von Unix gedacht sind. Es geht doch nichts ueber ein sinnvolles Design.

CCRDude 24. Apr 2007 10:32

Re: Speicherorte unter Windows
 
Zitat:

Zitat von cytrinox
Der Thread faselt über 2 Seiten genau das was ich beschrieben hab. [1.] All Users ist nur mit Adminrechten beschreibbar, [2.] Im Programm Verzeichnis darf nichts mehr abgelegt werden (find ich ok!) [3.] und das was in der Registry landet wird unter Vista virtualisiert.

Aber wo man die Daten abspeichern soll steht da nicht. Der einzige Lösungsvorschlag der kam, war den Installer mit Adminrechten starten zu lassen (mach ich übrigens auch).

1. Stimmt nicht - genau am Ende dieser zwei Seiten hab ich noch geschrieben, daß eben doch nicht nur Admins auf All Users schreibend zugreifen dürfen - der Unterordner Application Data/Anwendungsdaten ist genau eben für die genannten Datenbankdateien/Formulardateien etc. da - programminterne Anwendungsdaten.

2. Übereinstimmung.

3. Imho nur solange mein kein Manifest einbindet, danach klappt der schreibende Zugriff als Nicht-Admin einfach nicht mehr.

Wenn dann unbedingt noch ein Platz in der Registry sein muss, kann man dort auch während der Installation die Rechte an einem einzelnen Schlüssel in HKLM anpassen (RegSetKeySecurity, ConvertStringSecurityDescriptorToSecurityDescripto r, etc.).

Zitat:

Zitat von Robert Marquardt
Ich glaube jetzt verstehst du wofuer "User, Gruppe, Alle" bei den Dateirechten von Unix gedacht sind. Es geht doch nichts ueber ein sinnvolles Design.

Sinnvoll? Naja, "einleuchtend" oder "simpel" mag mans nennen, aber wenn ich mir überlege, was in komplexen Situationen manchmal für zusätzliche Hilfsgruppen erfunden werden müssen, nur weil mal zwei ansonsten kaum überschneidende Gruppen gleichermassen auf Dateien zugreifen sollen, da sind die Windows-ACLs schon wesentlich sinnvoller!
Besser wars imho nur früher in Novell Netware gelöst ;)

Chewie 24. Apr 2007 10:42

Re: Speicherorte unter Windows
 
Ich würde die Sachen irgendwo unter AllUsers speichern - und zwar in einem Verzeichnis, welches der Installer erstellt. Dieser gibt den Benutzern, die sie brauchen, auch entsprechende Rechte.
Bei Unix geht das ja genauso - /etc ist ja auch nicht schreibbar durch alle Benutzer, höchstens bestimmte Unterordner, die aber erstmal entsprechend "gechmoded" und "gechowned/"gechgrped" werden müssen.

Luckie 24. Apr 2007 11:06

Re: Speicherorte unter Windows
 
Zitat:

Zitat von cytrinox
Oder er kann sich endlich dazu entschließen die Registrierungsinfos einzutippen.

Das sollte ja wohl die Aufgabe des Administrators sein.

Zitat:

Edit: und HKLM / AllUsers gibts bei mir nicht (winXP SP2)
Ersteres war der entsprechende Schlüssel in der Registry und zweiteres der Entsprechende Ordner im Dateisystem.

CCRDude 24. Apr 2007 11:25

Re: Speicherorte unter Windows
 
Nochmal im Detail Zugriff auf einen Pfad, der schon von Haus aus auch für eingeschränkte Benutzer verfügbar ist (wie ich im anderen Topic erwähnte "Hans Dampf", nur in Gruppe "User", darf dort schalten und walten).

Delphi-Quellcode:
function SpecialDirectory(const iID: Integer): string;
// Needs: ShlObj on Delphi, WinExt on FPC
var aPath : array[0..MAX_PATH] of Char;
    pilTemp: PItemIDList;
begin
   try
      if SHGetSpecialFolderLocation(0, iID, pilTemp)=S_OK then begin
         if SHGetPathFromIDList(pilTemp, aPath) then begin
            Result := string(aPath);
         end else Result := '';
         CoTaskMemFree(pilTemp);
      end else Result := '';
   except
      Result := '';
   end;
end;

const CSIDL_COMMON_APPDATA = $0023;
var sPath: string;
begin
   sPath := SpecialDirectory(CSIDL_COMMON_APPDATA);
end;
Überhaupt keine Anpassung von Rechten etc. notwendig. Siehe auch MSDN: ShGetSpecialFolderLocation bzw. MSDN: Liste aller CSIDLs.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.
Seite 1 von 3  1 23      

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