Ejecutar proceso como administrador desde una aplicación no administrativa


De una aplicación que no se está ejecutando como administrador, tengo el siguiente código:

ProcessStartInfo proc = new ProcessStartInfo();
proc.WindowStyle = ProcessWindowStyle.Normal;
proc.FileName = myExePath;
proc.CreateNoWindow = false;
proc.UseShellExecute = false;
proc.Verb = "runas";

Cuando llamo a Process.Inicio (proc), no aparece una ventana emergente pidiendo permiso para ejecutar como administrador, y el exe no se ejecuta como administrador.

Intenté agregar una aplicación.manifiesto al ejecutable encontrado en myExePath, y actualizado el requestedExecutionLevel a

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Con la aplicación actualizada.manifiesto, en el Proceso.Inicio (proc) llamada, obtengo una excepción, " La solicitada la operación requiere elevación."

¿Por qué no es el.Acción verbal ¿no establece privilegios de administrador?

Estoy probando el estándar R2 de Windows Server 2008.

Author: John Saunders, 2013-06-04

1 answers

Usted debe utilizar ShellExecute. ShellExecute es la única API que sabe cómo lanzar Consent.exe para elevar.

Código fuente de muestra (. NET)

En C#, la forma de llamar a ShellExecute es usar Process.Start junto con UseShellExecute = true:

private void button1_Click(object sender, EventArgs e)
{
   ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
   info.UseShellExecute = true;
   info.Verb = "runas";
   Process.Start(info);
}

Si quieres ser un buen desarrollador, puedes detectar cuando el usuario haga clic en No :

private void button1_Click(object sender, EventArgs e)
{
   const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.

   ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
   info.UseShellExecute = true;
   info.Verb = "runas";
   try
   {
      Process.Start(info);
   }
   catch (Win32Exception ex)
   {
      if (ex.NativeErrorCode == ERROR_CANCELLED)
         MessageBox.Show("Why you no select Yes?");
      else
         throw;
   }
}

Observación adicional

  • UAC-Qué. Cuan. Por qué.. La arquitectura de la UAC, explicando que CreateProcess no puede hacer elevación, solo crear un proceso. ShellExecute es el que sabe cómo lanzar el Consentimiento.exe, y Consentimiento.exe es quien comprueba las opciones de directiva de grupo.

Nota : Cualquier código liberado al dominio público. No se requiere atribución.

 46
Author: Ian Boyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-15 01:58:20