[Windows] Globale Einstellungen speichern, bevorzugt ohne Admin Rechte

#1426789
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
#1426851
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
Gast #1426864
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.
#1426914
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.
Persönliche Seite #1426919
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
#1428664
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
#1431650
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
Gast #1431672
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren