La respuesta obvia es agregar un archivo de manifiesto que el proyecto de C# y añadir la siguiente línea:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
embargo, un enfoque poco ortodoxo puede también ser tomado. Sabemos que el acceso al registro requiere privilegios de administrador. Por lo tanto, si tiene una función que contiene un acceso de escritura de registro, la función lanzará un System.Security.SecurityException
si no ejecuta el programa como administrador. Se implica que debe llamar a esta función al comienzo del programa. Si se lanza esta excepción, puede informar al usuario que ejecute el programa como administrador y cierre el programa.
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);
}
}
Aquí, el true
en línea rk = rk.OpenSubKey(registryPath, true)
le dice al programa que necesita acceso de escritura en el registro.
Posible duplicado de [¿Cómo forzar a mi aplicación .NET a ejecutarse como administrador?] (Http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as -administrador) – amens