Frage

in meiner Anwendung muß ich Einstellungen speichern, die ‚global‘ (das heißt nicht benutzerspezifisch) in einer bekannten und berechenbaren Lage sind.

Ich mag, dass die Anwendung in der Lage sein, von überall ausgeführt werden sollte (als Standardbenutzer, NOT-Administrator), mehrere Kopien von verschiedenen Standorten und in der Lage, einschließlich den gespeicherten Konfigurationsdateien lesen und schreiben.

müssen die Daten gelesen und für alle Standard-Benutzer gewährt Zugang zu schreiben, nicht nur eine.

In diesem Sinne stellte die vier Optionen hier sind ungeeignet: http://msdn.microsoft.com/en -US / library / bb206295 (VS.85) aspx # ID0E1BA

Also, was sind meine Alternativen?

Meine Anwendung ist in C ++ geschrieben und nur für Windows. Ich muss Windows XP unterstützen und darüber.

Danke.

EDIT:

Um zu klären, ignorieren Bedingungen Rennen durch mehrere Instanzen verursacht. Diese Frage ist ausschließlich mit dem zu tun, wo die Daten zu speichern. Ich kann nicht überall geeignet, dass ist:

  1. vorhersagbar (z.B.% APPDATA% \ foo ein 'vorhersagbaren' path, aber leider benutzerspezifischen)
  2. Global (z% Programdata% \ Foo ist ein globaler Weg, aber leider nur die Erstellung von Benutzer hat Schreibzugriff)
  3. Barriere (ein Standardbenutzer braucht neue Dateien im angegebenen Verzeichnis erstellen zu können, dies gilt für alle Benutzer auf dem System)
War es hilfreich?

Lösung

Wenn Sie sich entscheiden, dass CSIDL_COMMON_APPDATA nicht geeignet ist (vielleicht ist CSIDL_COMMON_APPDATA ein guter Standard, aber Sie wollen, dass der Administrator in der Lage sein, um die Position zu ändern) können Sie das Installationsprogramm schreiben, etwas zu einem HKLM\SOFTWARE\<your app subkey> haben können, die den gewünschten Pfad für die anzeigt, gemeinsames Verzeichnis, das die Daten halten.

Eine Alternative des Zeiger in der HKLM-Registrierung zu platzieren ist eine Konfigurationsdatei zu haben, die im Programmverzeichnis befindet, die einen Zeiger auf das freigegebene Verzeichnis hat. Per Definition muss das Programmverzeichnis vom Errichter beschreibbar, dann ist es beschreibbar von Administratoren (die zur Modifikation der Konfiguration verantwortlich sein könnten), und es ist lesbar durch die Nutzer. So ein Standardbenutzer einen bekannten Ort lesen kann (entweder einen HKLM Unterschlüssel oder eine Konfigurationsdatei im Programmverzeichnis) einen Zeiger auf ein Verzeichnis zu erhalten, die von allen Standard-Benutzern beschreibbar ist.

Was auch immer das gemeinsame Verzeichnis (das Installationsprogramm oder das Konfigurationsmodul) einrichtet wird sicher ACL des gemeinsamen Verzeichnisses benötigen, um richtig eingestellt ist für Standard-Benutzer schreiben.

Andere Tipps

Versuchen Sie, die öffentlichen Ordner im Benutzerprofilverzeichnis:

CSIDL_COMMON_DOCUMENTS

Edit: Oder nutzen

CSIDL_COMMON_APPDATA

, sondern legen Sie die Berechtigungen für die Gruppe Authentifizieren Benutzer, wenn möglich.

Sie sind wahrscheinlich der Suche nach CSIDL_COMMON_APPDATA. IIRC, die auch eine gute Wahl sein sollte, sollten Sie gehen für alle Windows-Logo-Zertifizierungen. Im Falle, dass es Sie nicht befriedigt, überprüfen diesen Link auf MSDN , sollten Sie die beste Lösung für Ihre Bedürfnisse dort finden können.
Viel Glück.

Können Sie sich keine festen Verzeichnisnamen verwenden, z.B. c: \ FixedDataForYourProgram

Wir tun dies auf XP. Ich habe nicht dieses programmatisch auf Vista / Win7 versucht, aber angemeldet als Standardbenutzer auf Vista Ich habe kein Problem, ein Verzeichnis im Root-Verzeichnis zu erstellen.

Ich bin sicher, das alle Arten von Regeln bricht, aber es ist einfach. Ich mag einfach.

Optionen:

  1. Datei-Mutex, um den Zugriff auf die Datei
  2. Datenbank zum Speichern von Einstellungen
  3. Web-Service-Einstellungen zu speichern, die Gleichzeitigkeit verarbeiten kann
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top