2016-09-11 2 views
1

Nehmen wir an, ich möchte einen Registrierungsschlüssel mit dem folgenden Skript ändern.Erhöhungsberechtigung für C# -Skripte

RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Company\\SomeFolder", true); 

if(myKey != null) 
{ 
    myKey.SetValue("NameXYZ", "1", RegistryValueKind.String); 
    myKey.Close(); 
} 

Der Wert wird nicht geändert, da ich keine Berechtigungen habe. Eine Möglichkeit zum Ändern des Registrierungsschlüsselwerts ist z. Führen Sie VS mit den Administratorrechten aus, und führen Sie das Skript aus. Aber gibt es eine Möglichkeit, erhöhte Privilegien für alle C# -Skripte (.csx) festzulegen und dann dieses Skript z. VS mit normalen Privilegien?

+0

Nein, nicht wirklich. Hängt davon ab, wie Sie das Skript ausführen. Wenn Sie es über das interaktive C# -Fenster tun, müssen Sie VS erhöht ausführen. Wenn Sie es mit csi.exe tun, dann müssen Sie ein Programm ausführen, das mit seinem Manifest oder Runas nach einer Erhöhung fragt, und es csi.exe starten lassen. –

Antwort

0

Um eine Erhöhung vom Windows-Betriebssystem anzufordern, müssen Sie ein Manifest in Ihre Anwendung einfügen:

<?xml version="1.0" encoding="utf-8"?> 
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 

     <!-- Leave the desired execution level here -->  
     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false"> 

     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

Die Ablaufebene definiert werden als (von MSDN here genommen) folgt:

  • asInvoker: Die Anwendung wird mit den gleichen Berechtigungen wie der Prozess ausgeführt, dass es gestartet. Die Anwendung kann auf eine höhere Berechtigungsebene erhöht werden, indem Sie Als Administrator ausführen auswählen.

  • höchsteAktuell: Die Anwendung wird mit der höchsten Berechtigungsstufe ausgeführt, die sie ausführen kann. Wenn der Benutzer, der die Anwendung startet, ein Mitglied der Administratorengruppe ist, ist diese Option identisch mit requireAdministrator. Wenn die höchste verfügbare Berechtigungsstufe höher ist als die Stufe des Eröffnungsvorgangs, fordert das System zur Eingabe von Anmeldeinformationen auf.

  • requireAdministrator: Die Anwendung wird mit Administratorberechtigungen ausgeführt. Der Benutzer, der die Anwendung startet, muss Mitglied der Administratorengruppe sein. Wenn der Eröffnungsvorgang nicht mit Administratorrechten ausgeführt wird, fordert das System zur Eingabe von Anmeldeinformationen auf.

Fazit

Um Werte in die Registry zu schreiben, sollten Sie wahrscheinlich auch <requestedExecutionLevel level="requireAdministrator" /> in Ihrem Manifest. Aber vielleicht sollten Sie nicht einmal auf HKEY_LOCAL_MACHINE sondern HKEY_CURRENT_USER schreiben (siehe this answer).