2012-07-25 16 views
43

Powiel możliwe:
Check if the current user is administratorC# Sprawdź, czy uruchomić jako administrator

muszę sprawdzić, czy aplikacja (napisany w C#, uruchomiony system operacyjny Windows XP/Vista/7) jest uruchomiony jako administrator (tak jak w przypadku kliknięcia prawym przyciskiem myszy .exe -> Uruchom jako administrator lub Uruchom jako administrator na karcie Kompatybilność w obszarze Właściwości).

Mam wyszukiwane przeze mnie i przeszukiwane StackOverflow, ale nie mogę znaleźć działającego rozwiązania.

Moja ostatnia próba była to:

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

Czy to jest rzeczą UAC? To znaczy. użytkownik jest już administratorem, ale chcesz się dowiedzieć, czy aplikacja jest podniesiona w ramach UAC? – spender

+2

Nie duplikat. To pytanie dotyczy procesu, a nie zalogowanego użytkownika. –

Odpowiedz

79

Spróbuj

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

To wygląda funkcjonalnie takie same, jak w kodzie, ale przede pracuje dla mnie ...

robi to funkcjonalnie, (bez niepotrzebnych zmiennych temp) ...

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

lub za pomocą ekspresji zabudowanych nieruchomości:

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

Upewnij się, że zawiera "using System.Security.Principal;" – LightLabyrinth

+0

Pracowałem dla mnie na Windows 10. – Alexander

+0

Musisz zawinąć go w instrukcję using: "using (var identity = WindowsIdentity.GetCurrent())" – zezba9000

Powiązane problemy