2012-07-25 17 views
43

可能性の重複として実行する場合:私は(OSのWindows XP/Vistaの/ 7を実行して、C#で書かれた)アプリケーションが実行されているかどうかをテストする必要が
Check if the current user is administratorC#のチェック管理者

([プロパティ]の[互換性]タブで、.exe - >管理者として実行]または[管理者として実行]のように)

私はグーグルとStackOverflowを検索しましたが、私は実際の解決策を見つけることができません。

私の最後の試みはこれだった:

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

これは、UACの事ですか?私。ユーザーは既に管理者ですが、アプリがUACの下で昇格されているかどうかを知りたいですか? – spender

+2

重複していません。この質問は、ログインしているユーザーに関するものではなく、プロセスに関するものです。 –

答えて

79

これは、機能的にあなたのコードと同じに見えますが、上記の私のために働いている...

がやってこの

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

をお試しくださいそれは機能的に(不要な一時変数なしで)...

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

や、表現ボディのプロパティを使用して:

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

「using System.Security.Principal;」を必ず含めてください。 – LightLabyrinth

+0

Windows 10で働いています。 – Alexander

+0

usingステートメントでラップする必要があります。 "using(var identity = WindowsIdentity.GetCurrent())" – zezba9000