2010-08-30 26 views
24

Cómo forzar a mi C# Winforms programa ejecutar como administrador en cualquier computadora? y cualquier tipo de sistema operativo?¿Cómo forzar a que mi programa C# Winforms se ejecute como administrador en cualquier computadora?

necesito solución de código (cualquier código de ejemplo será excelente)

Gracias de antemano

+0

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

Respuesta

43

Puede incrustar este manifiesto en su aplicación.

<?xml version="1.0" encoding="utf-8" ?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication" /> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <security> 
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</asmv1:assembly> 
+13

para obtener los pasos completos que incluyen cómo agregar un archivo de manifiesto en VS http://philippsen.wordpress.com/tag/requestedexecutionlevel-manifest/ –

10

Aquí está el código de ejemplo para ejecutar su aplicación como administrador.

ProcessStartInfo proc = new ProcessStartInfo(); 
proc.UseShellExecute = true; 
proc.WorkingDirectory = Environment.CurrentDirectory; 
proc.FileName = Application.ExecutablePath; 
proc.Verb = "runas"; 
try 
{ 
    Process.Start(proc); 
} 
catch 
{ 
    // The user refused the elevation. 
    // Do nothing and return directly ... 
    return; 
} 
Application.Exit(); // Quit itself 

Establecer la ProcessStartInfo.Verb a “runas” se deja correr como administrador. Aquí está relacionada FAQ

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91

+1

Creo que OP está preguntando cómo forzar su aplicación a siempre bajo con privilegios de administrador no cómo ejecutar ninguna aplicación desde dentro de la aplicación de CA como administrador –

+0

esto causó que mi aplicación se bloquee. – CodeIt

2

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.

Cuestiones relacionadas