Die offensichtliche Antwort ist eine Manifest-Datei auf das C# Projekt hinzuzufügen, und fügen Sie die folgende Zeile:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
aber ein eher unorthodoxer Ansatz kann auch genommen werden. Wir wissen, dass für den Zugriff auf die Registrierung Administratorrechte erforderlich sind. Wenn Sie also eine Funktion haben, die einen Registrierungsschreibzugriff enthält, wird die Funktion System.Security.SecurityException
auslösen, wenn Sie das Programm nicht als Administrator ausführen. Es wird vorausgesetzt, dass Sie diese Funktion am Anfang des Programms aufrufen müssen. Wenn diese Ausnahme ausgelöst wird, können Sie den Benutzer informieren, das Programm als Administrator auszuführen und das Programm zu schließen.
public void enforceAdminPrivilegesWorkaround()
{
RegistryKey rk;
string registryPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\";
try
{
if(Environment.Is64BitOperatingSystem)
{
rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
}
else
{
rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
}
rk = rk.OpenSubKey(registryPath, true);
}
catch(System.Security.SecurityException ex)
{
MessageBox.Show("Please run as administrator");
System.Environment.Exit(1);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
Hier erzählt die true
in Zeile rk = rk.OpenSubKey(registryPath, true)
das Programm, das es den Schreibzugriff auf die Registrierung benötigt.
Mögliches Duplikat von [Wie erzwinge ich, dass meine .NET-Anwendung als Administrator ausgeführt wird?] (Http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as -Administrator) – amens