2009-07-06 6 views
2

Ich habe angefangen, ein guter Bürger zu werden, wie pro diese Frage hier:Benutzer/Öffentlich in Windows 7 nicht beschreibbar: Wo gebe ich Benutzerdaten an?

Domain compatibility: where should shared data be written?

Meine Benutzerinformationen werden jetzt geschrieben an die Umgebungsvariable:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 

und Anhänge dann ein Verzeichnis Dort. Wenn das Verzeichnis nicht existiert, erstellt das Programm es automatisch, und dann werden alle benutzerübergreifenden Informationen (Protokolldateien, erfasste Daten, Setup-Optionen usw.) in dieser Datei gespeichert. Ich verstehe diese Datei so, dass sie unabhängig vom Setup des Rechners vollständig vom Benutzer beschreibbar sein sollte.

Unter Windows XP, wenn an eine Domäne angehängt, gibt es kein Problem; Diese Datei wird erkannt und korrekt geschrieben. Unter Windows 7 funktioniert das Programm nicht. Das Verzeichnis des Benutzers ist jetzt C: \ ProgramData \ MyFolder, und dieser Ordner wird nur als schreibgeschützt erstellt (genial! Warum nicht einfach nur lesen, denn niemand möchte in den Speicherort von CommonApplicationData schreiben!).

Welches Verzeichnis sollte ich verwenden? Dieser 'spezielle Ordner' ist derjenige, der für die Aufgabe vorgesehen ist, die ich brauche, aber es scheint, dass dieser Ordner nicht vom Benutzer beschreibbar ist.

Bearbeite als Antwort auf die erste Antwort: Ich benutze ein WiX-Installationsprogramm und bin völlig in Ordnung mit dem Hinzufügen von beliebigen Dateien zum Installationsprogramm dort. Ich bin mir nicht sicher, wie ich das machen soll, also antworten Sie bitte mit den Zauberwörtern des WiX Installers.

Antwort

2

Nach Vista compatibility guidelines sollte Ihre Anwendung einen Ordner für ihre Sachen unter CommonApplicationsData im Installer erstellen (habe ich erwähnt, dass es auch ein Installationsprogramm haben muss?), Und diesem Ordner dort die entsprechenden Berechtigungen zuweisen.

+0

ok, also wie verwende ich die FileSystemAccessRule für alle Benutzer? Der Funktionsaufruf scheint nur eine bestimmte Benutzer-ID zu verwenden. – mmr

+0

Diese Benutzer-ID kann "Jeder" sein. Dies ist eine Gruppe, zu der ein Windows-Benutzer gehört. Sie sollten den Namen jedoch nicht fest codieren, da er bei lokalisierten Windows-Versionen variiert. Verwenden Sie stattdessen etwas wie folgt: SecurityIdentifier alle = neu SecurityIdentifier (WellKnownSidType.WorldSid, null); FileSystemAccessRule-Regel = new FileSystemAccessRule (alle, ...); –