2009-05-22 2 views
2

Ich muss einige Daten schreiben (für Testverwendung/Ablauf) und ich brauche die App in der Lage zu lesen/schreiben an diesen Ort von einem Non-Admin-Konto auf Vista mit UAC "on".Wo kann ich Daten schreiben, die von allen Benutzern in Windows Vista angezeigt und geändert werden können?

Außerdem möchte ich die Daten von jedem Benutzerkonto sehen und ändern können.

Ich dachte ursprünglich an die KHEY_CURRENT_USER Registry Hive schreiben, aber das wird für jeden Benutzer eindeutig sein.

Alle anderen Standorte?

Ich versuchte: % ALLUSERSPROFILE% \ Testdirectory

Aber wenn NonAdmin1 erstellt und bearbeitet eine Datei dann die Datei nicht speichern Admin1 kann, nachdem es geändert hat (obwohl es die Datei lesen kann).

Antwort

0

Wenn Sie die Datei erstellen oder nachdem Sie es geschrieben haben, sollten Sie in der Lage sein, die Berechtigungen für die Gruppe "Benutzer" zu ändern, um mehr Zugriff zu haben. Es sieht so aus, als ob der "Ersteller Besitzer" volle Erlaubnis bekommt und die Gruppe "Benutzer" nur gelesen wird & ausführen.

Die andere Option besteht möglicherweise darin, das Verzeichnis "TestDirectory" zu erstellen und die Gruppe Benutzer so einzustellen, dass während der Installation uneingeschränkter Zugriff gewährt wird.

+0

Wie würde ich die Berechtigungen programmatisch ändern? Vielleicht mit CACLS? IIRC, das Administratorrechte erfordert. –

+0

Der Ersteller einer Datei hat in der Regel spezielle Berechtigungen. Ich konnte Schreibrechte für die Benutzergruppe in einem Ordner hinzufügen, den ich in C: \ ProgramData erstellt habe, ohne UAC-Erhöhung zu benötigen. Es ist schon eine Weile her, dass ich irgendwelche Berechtigungen programmiert habe :( – crashmstr

1

Es gibt einen Blogbeitrag dazu: blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx (Ich darf noch nicht verlinken, du musst cut-n-paste machen, bis es korrigiert ist.

Es scheint sich tatsächlich um eine bestimmte Frage zu drehen: Wenn Sie Dateien haben, die von allen Benutzern beschreibbar sein sollen, erwarten Sie, dass der Benutzer die Dateien im Explorer erkennt und in der Lage ist, einen Doppelklick auf sie auszuführen oder Sie möchten, dass die Dateien ausgeblendet werden und nur von Ihrer Anwendung im Hintergrund verwendet werden.

Wenn Sie möchten, dass die Dateien von allen Benutzern im Explorer gefunden werden, möchten Sie sie wahrscheinlich in c: \ users \ public ablegen. Alles, was Sie tun müssen, ist sie an diesem Ort zu platzieren, und die Standardsicherheit sollte funktionieren.

Wenn Sie möchten, dass die Dateien von Benutzern ausgeblendet werden, möchten Sie sie wahrscheinlich in c: \ programdata speichern. In diesem Fall ist die Standardsicherheit wahrscheinlich nicht korrekt, wenn Sie die Dateien erstellen. Daher müssen Sie die ACL der Anwendung für Ihre Dateien benötigen. Oder besser ist es wahrscheinlich, dass Ihr Setup-Programm eine Verzeichnisstruktur für Ihre App unter c: \ programdata erstellt und das Setup-Programm für jedes Verzeichnis eine gute Standard-ACL festlegt - dann muss Ihre App sich nicht darum kümmern, ACLs zu setzen erstellt die Dateien, es muss nur die Dateien an den richtigen Stellen erstellen.

In allen Fällen sollten Sie die entsprechende Win32- (oder .Net Framework-) Funktion aufrufen, um den Pfad zum Verzeichnis c: \ programdata oder c: \ users \ public zu erhalten. Schreiben Sie diese Pfade in Ihrer App nicht fest - wenn Sie den Code fest codieren, werden Sie einige Fälle übersehen, in denen der Benutzer das Verzeichnis verschoben oder Windows auf ungewöhnliche Weise installiert hat, und Ihre App wird beschädigt.