La réponse évidente est d'ajouter un fichier manifeste au projet C# et ajoutez la ligne suivante:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Mais, peut aussi adopter une approche plutôt peu orthodoxe. Nous savons que l'accès au registre nécessite des privilèges d'administrateur. Donc, si vous avez une fonction qui contient un accès en écriture de registre, la fonction lancera un System.Security.SecurityException
si vous n'exécutez pas le programme en tant qu'administrateur. Il est implicite que vous devez appeler cette fonction au début du programme. Si cette exception est levée, vous pouvez informer l'utilisateur d'exécuter le programme en tant qu'administrateur et de fermer le programme.
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);
}
}
Ici, le true
dans la ligne rk = rk.OpenSubKey(registryPath, true)
indique au programme qu'il a besoin d'un accès en écriture au registre.
Copie possible de [Comment forcer l'exécution de mon application .NET en tant qu'administrateur?] (Http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as -administrateur) – amens