La risposta ovvia è quella di aggiungere un file manifesto per il progetto C# e aggiungere la seguente riga:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Ma, un approccio poco ortodosso può anche essere presa. Sappiamo che l'accesso al registro richiede privilegi di amministratore. Quindi, se si dispone di una funzione che contiene un accesso di scrittura del registro, la funzione genererà un System.Security.SecurityException
se non si esegue il programma come amministratore. È implicito che devi chiamare questa funzione all'inizio del programma. Se viene generata questa eccezione, è possibile informare l'utente di eseguire il programma come amministratore e chiudere il programma.
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);
}
}
Qui, il true
in linea rk = rk.OpenSubKey(registryPath, true)
dice al programma che ha bisogno l'accesso in scrittura al Registro di sistema.
Possibile duplicato di [Come forzare l'esecuzione dell'applicazione .NET come amministratore?] (Http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as -amministratore) – amens