Delphi-PRAXiS

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.

Dezipaitor 24. Apr 2007 11:28

Re: Speicherorte unter Windows
 
Programmdaten, wie Datenbanken und andere größere Datenmengen, kommen unter DokumenteEinstellungne\<Benutzer>\Anwendungsdaten\ <Programmname>
rein.
Dateien, die der Benutzer verwalten will, kommen nach Eigene Dateien, wobei man hier nicht darauf bestehen kann,
dass die Daten dann auch noch da sind.

Luckie 24. Apr 2007 11:32

Re: Speicherorte unter Windows
 
Zitat:

Zitat von Dezipaitor
Programmdaten, wie Datenbanken und andere größere Datenmengen, kommen unter DokumenteEinstellungne\<Benutzer>\Anwendungsdaten\ <Programmname>
rein.

Und wenn mehrere Benutzer auf die Datenbank zugreifen sollen? ;)

CCRDude 24. Apr 2007 11:41

Re: Speicherorte unter Windows
 
"All Users" ist ja auch nur eine Form von "Benutzername", siehe mein Post darüber ;)

cytrinox 24. Apr 2007 11:45

Re: Speicherorte unter Windows
 
Zitat:

Zitat von Dezipaitor
Programmdaten, wie Datenbanken und andere größere Datenmengen, kommen unter DokumenteEinstellungne\<Benutzer>\Anwendungsdaten\ <Programmname>
rein.
Dateien, die der Benutzer verwalten will, kommen nach Eigene Dateien, wobei man hier nicht darauf bestehen kann,
dass die Daten dann auch noch da sind.

DOOHHHH :wall: Junge, ließ den Thread. EDIT: sry, vermutlich meintest du All Users, hast aber Benutzer geschrieben...

Also Dokumente und Einstellungen\All Users\Lokale Einstellungen\Anwendungsdaten find ich auch ideal, aber auf WinXP ist das hier nur mit Adminrechten beschreibbar (Neuinstallation von winXP in eine VMWare). Das ist auch das was der Windows Installer rausgibt. Oder meinst du wirklich All Users\Anwendungsdaten? Das gibts hier nämlich auch nochmal.

Zusammenfassend könnte ich also sagen die einzige Möglichekeit dieses doch recht "alltägliche" Problem zu lösen wäre wärend der Installation die Daten nach ...\All Users\Lokale Einstellungen\Hersteller\Prgname zu packen, einen Schlüssel unter HKLM\Software erstellen und dann hergehen und einfach für das Verzeichnis und den Key die Rechte für "Jeder" zu setzen (READ, WRITE, usw..)

Hab ich das richtig verstanden? - Dann werd ich mal das Büro verlassen, auf die Straße gehen und lautstark über Windows lachen. ;)

Aber eine andere Sache: angenommen "Jeder" hätte Zugriff auf HKLM/Software/Hersteller und ein eingeschränkter Benutzer speichert übers Programm Daten darin ab - z.b. die angesprochenen Registrierungsinfos. Dann würde das wohl unter WinXP funktionieren. Aber Vista tunnelt das ganze doch dann wieder, ganz egal ob der Zugriff hat oder nicht, denn laut einigen Seiten ist der Zugriff auf HKLM generell dicht für Non-Admins.

CCRDude 24. Apr 2007 12:03

Re: Speicherorte unter Windows
 
All Users\Lokale Einstellungen\Anwendungsdaten ist für wirklich lokales, hardwarebezogenes (Windows legt dort z.B. brennprogrammspezifisches ab, weil Brenner ja durchaus von Rechner zu Rechner unterschiedlich sein können).
All Users\Anwendungsdaten wird in Domänen zusammen mit dem Rest des Profils im Netz abgelegt.

Wenn Du also Domänen-Benutzern nicht aus einem bestimmten Grunde ein Roaming mit den Daten verweigern willst, solltest Du zweimal überlegen, ob Du Lokale Einstellungen verwenden willst.

(soviel zumindest mein Verständnis von "Lokale Einstellungen")

Ansonsten: ich wüsste ehrlich gesagt nicht, welche Konfigurationseinstellung, die JEDER Benutzer manipulieren darf, überhaupt einen Sinn in HKLM hätte. Gibt wenig nervigeres als andere Benutzer, die einem ständig die bevorzugten Einstellungen verstellen. Und die wenigen, die ein Grund dazu haben, sind eh Administrator oder Power User ;)

cytrinox 24. Apr 2007 12:42

Re: Speicherorte unter Windows
 
OK, also Anwendungsdaten direkt unter All Users hab ich grad nochmal unter XP ausprobiert - das funktioniert wunderbar als eingeschränkter Benutzer.
Ich nehm mal an das ist unter Vista immer noch so :)

Damit wäre die Sache der Datenspeicherung mal abgehakt :thumb:

Bleibt nur noch die Sache mit den Schlüsseln unter HKLM. Wird das unter Vista generell virtualisiert? Oder Schaltet sich die Virtualisierung ab, sobald ein Benutzer auf einen Unterschlüssel von HKLM Schreibzugriff hat? Es wundert mich doch schon ein bisschen, dass es in der Registry keinen offensichtlichen Schlüssel gibt der sowas ermöglicht :(

Luckie 24. Apr 2007 12:48

Re: Speicherorte unter Windows
 
Auch in dr Registry gibt es entsprechende Schlüssel. Öffne sie doch einfach mal mit dem Registryeditor und guck dir die Hives mal an. :?

Und nein unter Vista wird nichts generell virtualiisert. das hngt zum einem davon ab, ob die Virtualisierung aktiviert ist und mit welchen rechte das Programm ausgeführt wird. Ein Administrator kann unter Vista genauso in HKLM schreiben, wie unter allen anderen NT Systemen. Wenn er das nicht könnte, wozu wäre dann der Schlüssel gut bzw. sichtbar?

cytrinox 24. Apr 2007 12:58

Re: Speicherorte unter Windows
 
Jau, der Admin darf das natürlich. Ich meinte auch eher dass der Zugriff von Non-Admins auf HKLM generell getunnelt wird.

Und die Registry hab ich mir schon oft genug angesehen, aber finde einfach keinen Schlüssel dafür.
  • Global für alle Benutzer, d.h. die Möglichkeit eine Programmeinstellung die Benutzer A ändert, soll auch Benutzer B erfahren.
  • Lese/Schreibzugriff für alle Benutzer, eingeschränkte Benutzer, Admins, .. alle User eben.

sakura 24. Apr 2007 13:01

Re: Speicherorte unter Windows
 
Zitat:

Zitat von cytrinox
Ich meinte auch eher dass der Zugriff von Non-Admins auf HKLM generell getunnelt wird.

Eben nicht, weil es abgestellt werden kann. Somit ist die Virtualisierung keine Garantie.
Zitat:

Zitat von cytrinox
Global für alle Benutzer, d.h. die Möglichkeit eine Programmeinstellung die Benutzer A ändert, soll auch Benutzer B erfahren.

Gibt es unter Vista nicht. User A und B sind verschieden.
Zitat:

Zitat von cytrinox
Lese/Schreibzugriff für alle Benutzer, eingeschränkte Benutzer, Admins, .. alle User eben.

Gibt es per Standard nicht. Es muss erst vom Admin ein Verzeichnis ersellt werden, in welches jeder User schreiben kann. Und ob der Admin das macht und wohin er dieses Verzeichnis packt...

...:cat:...

cytrinox 24. Apr 2007 13:12

Re: Speicherorte unter Windows
 
Zitat:

Zitat von sakura
Eben nicht, weil es abgestellt werden kann. Somit ist die Virtualisierung keine Garantie.

Jau, aber was ist wenn die an ist?
Ich will doch nur wissen was passiert, wenn ich als Admin sagen wir mal den Schlüssel HKLM\FooBar erstelle und "Jeder" sämtliche Berechtigungen gebe. Ein eingeschrhänkter Benutzer, der darauf zugreifen will - darf der das oder greift da die Virtualisierungsregel "Wer auf HKLM zugreift und kein Admin ist, dessen Anfrage wird umgebogen?"

Dezipaitor 24. Apr 2007 20:57

Re: Speicherorte unter Windows
 
welche Benutzer sollen denn dort in AllUsers speichern dürfen?

Hmm komisch, bei mir dürfen Hauptbenutzer auch in den AllUsersOrdner Daten erstellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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