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
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?
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
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.
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.
> 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
bei ALLUSERSPROFILE hat man aber das Problem das man erweiterte Rechte braucht um dort etwas zu schreiben, als normaler Benuzter geht es jedenfalls nicht.
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
Ändere doch die Rechte, die zum Beschreiben des gemeinsamen Ordners nötig sind. MfG
und warum willst du es nicht über einen Extra Dienst wie oben geschrieben lösen?
Oder ändere die Rechte in der Registry.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.