usuario - login con privilegios c#
Ejecutar el proceso como administrador desde una aplicaciĆ³n que no es de administrador (1)
Debe usar ShellExecute
. ShellExecute es la única API que sabe cómo iniciar Consent.exe
para poder elevarlo.
Código fuente de ejemplo (.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 capturar cuando el usuario hace 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 de bonificación
- UAC - ¿Qué? Cómo. Por qué. . La arquitectura de UAC explica que
CreateProcess
no puede hacer elevación, solo crea un proceso.ShellExecute
es quien sabe cómo ejecutar Consent.exe, y Consent.exe es quien verifica las opciones de política de grupo.
Nota : Cualquier código lanzado al dominio público. No se requiere atribución.
Desde una aplicación que no se ejecuta 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.Start (proc), no aparece una ventana emergente solicitando permiso para ejecutar como administrador y el exe no se ejecuta como administrador.
Intenté agregar un app.manifest al ejecutable encontrado en myExePath, y actualicé el requiredExecutionLevel a
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Con el app.manifest actualizado, en la llamada Process.Start (proc), recibo una excepción, "La operación solicitada requiere elevación".
¿Por qué la acción .Verb no configura los privilegios de administrador?
Estoy probando en Windows Server 2008 R2 Standard.