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.
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.
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