2012-07-25 32 views
43

Duplicar posibles:
Check if the current user is administratorC# Comprobar si se ejecuta como administrador

que necesito para probar si la aplicación (escrito en C#, con el SO Windows XP/Vista/7) se está ejecutando como administrador (como en el botón derecho del ratón .exe -> Ejecutar como administrador, o Ejecutar como administrador en la pestaña Compability en Propiedades).

He buscado y buscado en Google StackOverflow pero no encuentro una solución que funcione.

Mi último intento fue la siguiente:

if ((new WindowsPrincipal(WindowsIdentity.GetCurrent())) 
     .IsInRole(WindowsBuiltInRole.Administrator)) 
{ 
    ... 
} 
+1

¿Es esta una cosa UAC? Es decir. el usuario ya es administrador, pero desea saber si la aplicación se encuentra elevada bajo UAC? – spender

+2

No es un duplicado. Esta pregunta pregunta sobre el proceso, no sobre el usuario conectado. –

Respuesta

79

probar este

public static bool IsAdministrator() 
{ 
    var identity = WindowsIdentity.GetCurrent(); 
    var principal = new WindowsPrincipal(identity); 
    return principal.IsInRole(WindowsBuiltInRole.Administrator); 
} 

Esto parece funcionalmente el mismo que el código, pero lo anterior está trabajando para mí ...

haciendo Funcionalmente, (sin variables temporales innecesarias) ...

public static bool IsAdministrator() 
{ 
    return (new WindowsPrincipal(WindowsIdentity.GetCurrent())) 
      .IsInRole(WindowsBuiltInRole.Administrator); 
} 

o, utilizando la expresión de cuerpo propiedad:

public static bool IsAdministrator => 
    new WindowsPrincipal(WindowsIdentity.GetCurrent())) 
     .IsInRole(WindowsBuiltInRole.Administrator); 
+13

Asegúrese de incluir "using System.Security.Principal;" – LightLabyrinth

+0

Funcionó para mí en Windows 10. – Alexander

+0

Necesita envolverlo en una declaración using: "using (var identity = WindowsIdentity.GetCurrent())" – zezba9000

Cuestiones relacionadas