2012-03-29 2 views
1

Ich habe eine Anwendung, die in seltenen Fällen seine Registrierungseinstellung ändern muss. Auch während der ersten Ausführung muss ein neuer Schlüssel erstellt werden. Ich entwickle das in Windows 7. Ich bekomme ThrowUnauthorizedAccessException. Wie erzwinge ich Windows, um eine UAC-Eingabeaufforderung zu erhalten, um meine Berechtigungen vorübergehend zu erhöhen?In App-Anforderung für die Rechteerweiterung C#. NET

Vielen Dank im Voraus.

+1

Sie können die Berechtigungen eines bereits vorhandenen Prozesses nicht erhöhen. Sie müssen einen neuen Prozess mit höheren Berechtigungen erstellen. – CodesInChaos

+0

@CodeInChaos Bummer. Ich habe wirklich gehofft, dass das möglich ist. – kmarks2

+1

Das Problem ist, dass die Berechtigungsstufe als Integritätslevel verdoppelt wird. Um die sichere Erhöhung bereits laufender Prozesse zu unterstützen, benötigt dieser Prozess jedoch eine Integritätsstufe auf der höchsten Ebene, die er erreichen kann. Andernfalls kann ein nicht vertrauenswürdiger anderer Prozess Ihren Prozess manipulieren, während Sie noch mit einer niedrigen Integritäts-/Berechtigungsstufe arbeiten. – CodesInChaos

Antwort

3

Sollen alle Benutzer diese Einstellung ändern können? Wenn dies der Fall ist, besteht die einfachste Lösung darin, Ihr Installationsprogramm so zu ändern, dass BenutzerFull Control des Registrierungsschlüssels angegeben werden.

Wenn nur Administratoren sollten in der Lage sein, diese Einstellung zu ändern, dann müssen Sie eine andere Kopie des Programms starten, Windows-fragen sie zu erheben:

ProcessStartInfo startInfo = new ProcessStartInfo("C:\Path\To\MyApplication.exe"); 

startInfo.Verb = "runas"; //trigger a UAC prompt (if UAC is enabled) 

System.Diagnostics.Process.Start(startInfo); 

Wenn Sie klug wäre, würde Sie einige Befehlszeile enthalten Argumente, so können Sie "sich selbst" sagen, dass es direkt zu dem Teil der Software springen sollte, mit dem der Benutzer umgehen muss. Oder Ihre Befehlszeilenargumente könnte einfach sagen, was Sie wollen getan:

ProcessStartInfo startInfo = new ProcessStartInfo(
     "C:\Path\To\MyApplication.exe", 
     "/setLoggingEnabled yes"); 

startInfo.Verb = "runas"; //trigger a UAC prompt (if UAC is enabled)  

System.Diagnostics.Process.Start(startInfo); 

Haben Sie Ihre Anwendungsprüfung für den setLoggingEnabled Schalter, die Änderung vorzunehmen, und dann beenden.

Update: Eine häufige Situation ist Spieler World of Warcraft. Da das Spiel sich während des Laufens selbst aktualisieren darf, müssen alle Benutzer berechtigt sein, die Spieldaten in Program Files zu ändern. Die korrekte und gültige Aktion ist es, die ACLs auf dem

C:\Program Files\Blizzard\World of Warcraft 

Ordner zu ändern, so dass alle Benutzer die volle Kontrolle haben. Bevor Blizzard sich zusammengetan hat, veröffentlichte Microsoft ein Kompatibilitätsupdate, das allen Benutzern die volle Kontrolle über den WoW-Ordner gibt, sobald es als Administrator ausgeführt wird.

Ein weiterer häufiger Fall ist, wenn der Blizzard Launcher mit administrativen privelages gestartet wird, aktualisiert er einen Registrierungsschlüssel in HKLM, Aufnahme wo das Spiel ist. Das passiert, wenn ich beispielsweise WoW von einer Festplatte auf ein SSD-Laufwerk verschiebe

führe den Launcher einmal als Administrator aus, damit die Updates funktionieren.

+0

Danke. Das ist so nahe an einer Antwort wie ich es gesehen habe. – kmarks2