2 Stimmen

Prüfen Sie, ob der Benutzer Schreibrechte in "Programme" hat.

Ich muss prüfen, ob der aktuelle Benutzer Schreibrechte innerhalb der Program Files Ordner.
Das Hauptproblem tritt in Vista/7 auf - wenn ich einfach versuche, eine temporäre Datei an diesem Ort zu erstellen, erhalte ich eine Ausnahme, selbst wenn der Benutzer eine solche Operation mit dem Windows Explorer durchführen kann (nachdem er die UAC-Erweiterung zugelassen hat). Klingt vernünftig, da der Prozess selbst nicht mit Administratorrechten ausgeführt wurde.
Ich habe dann versucht, mit este Lösung, aber ich bekam immer "true" zurück, auch wenn ich versuchte, es mit einem Standardbenutzer (nicht Administrator) auszuführen.

Was ich letztendlich beantworten möchte, ist für den Fall, dass der Benutzer versucht, ein Verzeichnis innerhalb der Program Files Müsste er sich als Administrator anmelden, oder würde ein einfacher Klick auf "Weiter" in der UAC genügen?
Ich suche nach einer Möglichkeit, diese Frage zu beantworten, ohne selbst das UAC-Popup-Fenster (in welcher Form auch immer) aufzurufen. Gibt es eine relativ einfache Möglichkeit, dies zu tun?

UPDATE

Danke für das Angebot, den UserData-Ordner zu verwenden, aber ich muss nur wissen, ob der Benutzer Schreibzugriff auf den Ordner hat, damit ich entscheiden kann, ob ich versuchen sollte, ein Auto-Update durchzuführen (das eine msi ausführt) oder nicht.

6voto

Veeti Punkte 5169

Eine bessere Lösung ist es, die Anwendungsdaten einfach dort zu speichern, wo sie hingehören:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

3voto

Henk Holterman Punkte 249753

Es wäre besser, sich an die Regeln zu halten. Beachten Sie, dass nicht alle Benutzer in der Lage sind, über die Benutzerkontensteuerung die Berechtigungen zu erweitern. Und Sie könnten versuchen, zu schreiben, und es scheint zu gelingen, aber mit Vista/Win7 "virtualisieren" Sie Ihr Schreiben irgendwo anders.

Da Sie das Thema C# und Windows markiert haben, sehen Sie sich

string dataPath = 
   Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

0voto

Dirk Vollmar Punkte 166522

Es gibt gute Gründe dafür, dass der Speicherort ProgramFiles keinen Schreibzugriff ohne Zustimmung des Benutzers erlaubt. Sie müssten entweder

  1. Ihre Anwendung immer im Status "Erweitert" auszuführen (und bei jedem Start die Zustimmung des Benutzers einzuholen), oder
  2. einen Dienst für die automatische Aktualisierung verwenden
  3. die Aktualisierung in den temporären Ordner des Benutzers herunterladen und dann mit Berechtigung ausführen

Option 1 und 2 haben gravierende Nachteile, daher empfehle ich Option 3. Dieser Weg wird auch von anderen Anwendungen verwendet (z. B. FireFox).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X