C#で自分が管理者で実行されているか調べる

Windowsではユーザー毎に権限が設定されていて、それによってアプリケーションの行動が制限される。

例えば管理者権限を持っていないと特定のフォルダにアクセスできなかったり、レジストリの登録ができなかったり。

 

またWindows Vista以降では、UAC(ユーザーアカウント制御)という仕組みが導入されていて、これが有効になっていると、管理者のユーザーでログインしていても、通常は標準ユーザーと同じ権限でアプリケーションが実行される。

アプリケーションを管理者として行動させるためには、右クリックして「管理者として実行(A)」とかしないといけない。

アプリケーションでレジストリを変更したりする場合は、事前に管理者の権限を持っているかを確認したい。C#では以下のようにして権限を確認する事が出来る。

 

アプリケーションの権限を確認する

        private bool IsAdministrator()
        {
            var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
            var principal = new System.Security.Principal.WindowsPrincipal(identity);
            return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
        }

 

WindowsIdentityを取得 (3行目)

System.Security.Principal.WindowsIdentityのGetCurrentメソッドで現在のユーザーを取得

 

WindowsPricipalを生成 (4行目)

identityを使ってSystem.Security.Principal.WindowsPrincipalを作成

このオブジェクトを使ってidentityが持つ権限などを確認できる

 

権限の有無を確認 (5行目)

IsInRoleメソッドで指定の権限を持っているかを確認

Administrator権限を持っているかを判断する