2010-02-17 10 views

Respuesta

24
WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator); 

if (!hasAdministrativeRight) 
{ 
    RunElevated(Application.ExecutablePath); 
    this.Close(); 
    Application.Exit(); 
} 

private static bool RunElevated(string fileName) 
{ 
    //MessageBox.Show("Run: " + fileName); 
    ProcessStartInfo processInfo = new ProcessStartInfo(); 
    processInfo.Verb = "runas"; 
    processInfo.FileName = fileName; 
    try 
    { 
     Process.Start(processInfo); 
     return true; 
    } 
    catch (Win32Exception) 
    { 
     //Do nothing. Probably the user canceled the UAC window 
    } 
    return false; 
} 
+2

Esta es la respuesta correcta, pero 'RunElevated' probablemente debería devolver un' bool' de modo que usted puede quejarse si el usuario ha cancelado la elevación. –

+2

Además, dado que cerrará y reiniciará la aplicación, si hay un estado para guardar, ocúpese de eso. Es posible que prefiera dividir el material que necesita elevación e iniciarlo sin cerrar la aplicación principal. –

Cuestiones relacionadas