mikrocontroller.net

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


Autor: Reinhard R. (reinhardr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Reinhard R. (reinhardr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Reinhard R. (reinhardr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian F. (vollbio)
Datum:

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

MfG

Autor: Peter (Gast)
Datum:

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

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder ändere die Rechte in der Registry.

Autor: Reinhard R. (reinhardr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.