Forum: PC-Programmierung [Windows] Globale Einstellungen speichern, bevorzugt ohne Admin Rechte


von Reinhard R. (reinhardr)


Lesenswert?

Hallo,

ich beschäftige mich gerade mit der folgenden Problemstellung, derzeit 
noch ohne befriedigender Antwort:
Zwei verschiedene Programme, salopp formuliert ein Server und ein 
Konfigurationstool, sollen auf die gleichen Einstellungen zugreifen 
können.
Um die Sache komplizierter zu machen befinden sich die beiden Programme 
in unterschiedlichen (unbekannten) Verzeichnissen, laufen unter 
verschiedenen Useraccounts und niemals zur gleichen Zeit. Das kann ich 
nicht ändern.

Bis Windows XP wäre es wohl am einfachsten gewesen die Einstellungen 
einfach unter HKLM\Software\... in der Registry zu speichern. Unter 
Vista/7 kann man im allgemeinen diesen Zweig nur mit Zustimmung der UAC 
beschreiben, was schon einmal etwas unkomfortabel für den Benutzer ist. 
Schlimmer wäre es aber wenn es ganz verhindert wird, weil die UAC beim 
Start der Anwendung nicht bemerkt dass die Rechte notwendig sind und 
dann später der Vorgang einfach unterdrückt wird.
Außerdem wird unter Windows Vista/7, soweit ich das richtig verstanden 
habe, die Registry teilweise virtualisiert. Wenn Windows der Meinung ist 
dass die Einstellungen nichts in HKLM verloren haben, werden sie 
transparent wo anders abgelegt (HKCU befürchte ich). Wenn dann das 
andere Programm unter einem anderen Useraccount startet kann es nicht 
auf die Einstellungen zugreifen.

Gibt es dafür eine relativ geradlinige Lösung die mit Windows 2000 - 7 
kompatibel ist?

Gruß
Reinhard

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Verzicht auf den Zugriff auf die Registry, Verwendung einer 
Konfigurationsdatei, die an einem für alle Benutzerkonten zugänglichen 
Ort abgelegt wird.
Gibt es da nicht etwas unter <users>/All Users?

von Reinhard R. (reinhardr)


Lesenswert?

Daran habe ich auch schon gedacht, aber zumindest auf den ersten Blick 
unterscheiden sich die Ordner unter XP und Vista ein wenig in ihrer 
Funktion.
Unter einem englischen XP wäre es wohl (zumindest bei einer 
Standardinstallation):
C:\Documents and Settings\All Users\Application Data\
unter Vista:
C:\Users\Public\Roaming\

In Abhängigkeit von OS Version und Sprache (zumindest bis XP) müsste man 
halt den Pfad anpassen. Ich glaube dazu gibt es ein paar 
Umgebungsvariablen, aber das muss ich mir noch ansehen. Eine Lösung bei 
der ich mir diese Anpassungen an das konkrete OS sparen kann wäre mir 
natürlich lieber.

Aber gut, die Registry scheint ein gangbarer Weg zu sein wenn man 
zumindest für die Konfiguration mir Administratorechten arbeitet. Das 
ist nicht ideal, aber zumindest akzeptabel. Die Virtualisierung (bzw. 
Data Rediriction) scheint nur bei unprivilegierten Usern ein Problem zu 
sein. Leider fällt das durch den transparenten Zugriff dem schreibenden 
Programm nicht auf.

Reinhard

von Peter (Gast)


Lesenswert?

man könnte ja auch noch ein Konfig Prozess hinzufügen der als Dienst 
läuft und den beiden anderen Programmen die Möglichkeit bieten eine 
Konfiguration zu lesen und zu schreiben. Diese Prozess/Dienst kann dann 
selbst entschieden wohin es die Daten speichert, weil er der einzigste 
ist der die Daten auch wieder lesen muss.

von Arc N. (arc)


Lesenswert?

Reinhard R. schrieb:
> Daran habe ich auch schon gedacht, aber zumindest auf den ersten Blick
> unterscheiden sich die Ordner unter XP und Vista ein wenig in ihrer
> Funktion.
> Unter einem englischen XP wäre es wohl (zumindest bei einer
> Standardinstallation):
> C:\Documents and Settings\All Users\Application Data\
> unter Vista:
> C:\Users\Public\Roaming\
>
> In Abhängigkeit von OS Version und Sprache (zumindest bis XP) müsste man
> halt den Pfad anpassen. Ich glaube dazu gibt es ein paar
> Umgebungsvariablen, aber das muss ich mir noch ansehen.

Da zu gibt es seit 1997 (IE4, shfolder.dll), SHGetFolderPath (Stichwort 
z.B.: CSIDL_COMMON_APPDATA, CSIDL_COMMON_DOCUMENTS etc.)
http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

Wie es mit der Registry geht, kann hier 
http://msdn.microsoft.com/en-us/library/aa965884(VS.85).aspx nachgelesen 
werden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Unter einem englischen XP wäre es wohl (zumindest bei einer
> Standardinstallation):
> C:\Documents and Settings\All Users\Application Data\
> unter Vista:
> C:\Users\Public\Roaming\
>
> In Abhängigkeit von OS Version und Sprache (zumindest bis XP) müsste man
> halt den Pfad anpassen. Ich glaube dazu gibt es ein paar
> Umgebungsvariablen,

Ja. %ALLUSERSPROFILE%.

Windows 2003 Server (de)
ALLUSERSPROFILE=C:\Dokumente und Einstellungen\All Users

Windows 7 (mehrsprachig)
ALLUSERSPROFILE=C:\ProgramData

von Peter (Gast)


Lesenswert?

bei ALLUSERSPROFILE hat man aber das Problem das man erweiterte Rechte 
braucht um dort etwas zu schreiben, als normaler Benuzter geht es 
jedenfalls nicht.

von Reinhard R. (reinhardr)


Lesenswert?

Danke für die hilfreichen Informationen. Die perfekte Lösung gibt es 
scheinbar nicht für mein Problem. Egal ob in der Registry oder in einem 
Konfigurationsfile, wenn es global zugänglich sein soll kann es 
offensichtlich nur von einem privilegiertem Benutzer verändert werden. 
Damit kann/muss man wohl leben.

Reinhard

von Florian F. (vollbio)


Lesenswert?

Ändere doch die Rechte, die zum Beschreiben des gemeinsamen Ordners 
nötig sind.

MfG

von Peter (Gast)


Lesenswert?

und warum willst du es nicht über einen Extra Dienst wie oben 
geschrieben lösen?

von Volker Z. (vza)


Lesenswert?

Oder ändere die Rechte in der Registry.

von Reinhard R. (reinhardr)


Lesenswert?

An den Berechtigungen will ich nach Möglichkeit nichts ändern. Damit 
reißt man unter Umständen Sicherheitslücken auf. Vor allem auf einem 
Rechner der nicht mir gehört möchte ich das vermeiden.

Der "Einstellungsservice" würde zwar funktionieren, aber das ist halt 
eine aufwendige Lösung. Das betrifft sowohl die Implementierung, als 
auch den Ressourcenverbrauch am System. Mir graut immer wieder davor, 
wenn ich auf meinem System nachsehe was da alles im Hintergrund läuft. 
Zu diesem Wildwuchs will ich ohne zwingendem Grund nicht weiter 
beitragen.

Gruß
Reinhard

von Peter (Gast)


Lesenswert?

> An den Berechtigungen will ich nach Möglichkeit nichts ändern. Damit
> reißt man unter Umständen Sicherheitslücken auf. Vor allem auf einem
> Rechner der nicht mir gehört möchte ich das vermeiden.
du musst ja bloss dein Path ändern, nicht alles.

> Der "Einstellungsservice" würde zwar funktionieren, aber das ist halt
> eine aufwendige Lösung. Das betrifft sowohl die Implementierung, als
> auch den Ressourcenverbrauch am System. Mir graut immer wieder davor,
> wenn ich auf meinem System nachsehe was da alles im Hintergrund läuft.
> Zu diesem Wildwuchs will ich ohne zwingendem Grund nicht weiter
> beitragen.

das ist zwar löblich, aber wenn es notwendig und das ganze etwas 
resourcend schondend Programmiert ist dann kommt man mit weniger als 
1Mbyte speicher aus - man muss ja nicht gleich java für soetwas nehmen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.