2011-05-10 19 views
25

Sé que hay algunas preguntas similares. Pero quiero verificar solo UNA cosa.C privilegio de administrador - marcando

Solo quiero saber si el programa se está ejecutando como administrador. Quiero verificarlo porque quiero editar algunos archivos seguros. El usuario no tiene que ser administrador. Solo quiero saber si mi aplicación tiene derechos para editar algunos archivos seguros que se pueden editar cuando se ejecuta como administrador.

+2

posible duplicado de [¿Cómo puedo saber si mi proceso está en ejecución ¿Como administrador?] (Http://stackoverflow.com/questions/509292/how-can-i-tell-if-my-process-is-running-as-administrator) –

+1

Acabo de buscar en Google esa pregunta y parece que lo pregunté hace 3 años. Bueno saber. Gracias Google. – Hooch

Respuesta

55

Esto devolverá un bool válida

using System.Security.Principal; 

bool isElevated; 
using (WindowsIdentity identity = WindowsIdentity.GetCurrent()) 
{ 
    WindowsPrincipal principal = new WindowsPrincipal(identity); 
    isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator); 
} 
+0

+1 porque eso incluso funciona en Linux (Mono). Te da verdad cuando se ejecuta como root/vía sudo. Da falso como usuario predeterminado. – MrPixelDream

+0

Creo que también debería deshacerse de 'identity' ya que es' IDisposable'. – Harry

+0

@Harry Supongo que hizo ese comentario antes de que se editara la respuesta para ajustar 'identity' en un bloque' using' – Manuzor

5

Aquí es @ respuesta de atrljoe se convirtió en un chiste con la última C#:

using System.Security.Principal; 

static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); 
+5

Esto es feo. Lo siento. Pero en realidad, debes acortar todo. Es mejor dejarlo como 4 líneas y hacer que funcione. ¿Cómo se puede depurar incluso un trazador de líneas? – Hooch

+0

Creo que la concisión es una vitue, siempre y cuando esté claro. –

+2

Interesante ... Me parece más fácil de leer que la versión expandida. Esto tiene una clara jerarquía de llamadas, mientras que para comprender el código explotó en diferentes variables, necesito ejecutarlo mentalmente. – bart

Cuestiones relacionadas