11

私のC#アプリケーションでは、現在のユーザーがAdministratorsグループのメンバーであるかどうかを確認する必要があります。WindowsXPとWindows7の両方と互換性がある必要があります。

現在、私は次のコードを使用しています。

bool IsAdministrator
{
    get
    {
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);

        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
}

問題は、昇格されていない管理者としてUACがオンになっているWindows 7でアプリケーションを実行すると、このメソッドがfalseを返すことです。アプリケーションが昇格されていない管理者として実行されている場合でも、ユーザーが管理者であるかどうかを確認するにはどうすればよいですか?

4

4 に答える 4

18

GetTokenInformation現在のトークンを確認するために使用できるWin32 API があります。返されたトークンが分割トークンである場合、非昇格モードで実行している管理者ユーザーである可能性があります。

GetTokenInformationtokenInformation次の 3 つの値のいずれかを取る出力パラメーターがあります。

  • TokenElevationTypeDefault = 1
  • TokenElevationTypeFull = 2
  • TokenElevationTypeLimited = 3

TokenElevationTypeLimited の値は、ユーザーが権限が制限された分割トークンで実行していることを示します。昇格すると、TokenElevationTypeFull 値が返されます。管理者以外のユーザーの値は TokenElevationTypeDefault です。

C# の完全なコード例がhttp://www.davidmoore.info/2011/06/20/how-to-check-if-the-current-user-is-an-administrator-even-if-uacにあります。 -オン/

于 2012-04-06T14:59:09.217 に答える
-6

あなたが管理者である場合は、コードから UAC を一時的に無効にしてから、再度有効にすることができます。レジストリキーは

キー: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 値: EnableLUA 設定: 無効にする場合は 0、有効にする場合は 1

だからあなたは次のようなことができます

RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\Policies\\System", true);
myKey.SetValue("EnableLUA", "1", RegistryValueKind.String);

次に、プリンシパルを確認します..これはハックのようなものですが、試してみる価値があります。

于 2012-04-06T15:03:45.917 に答える