如何确定用户是否是管理员,即使没有提升

mar*_*d13 10 .net c# uac windows-7

在我的C#应用​​程序中,我需要检查当前用户是否是Administrators组的成员.它需要与Windows XP和Windows 7兼容.

目前,我使用以下代码:

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

        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是如果应用程序在Windows 7上运行且UAC作为非提升管理员打开,则此方法返回false.即使应用程序作为非提升管理员运行,如何确定用户是否为管理员?

And*_*bel 18

有一个Win32 API GetTokenInformation可用于检查当前令牌.如果返回的令牌是拆分令牌,则它可能是在非升级模式下运行的管理员用户.

GetTokenInformation有一个输出参数tokenInformation,它取三个值之一:

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

TokenElevantionTypeLimited的值指示用户正在使用具有有限权限的拆分令牌运行.提升时,返回TokenElevationTypeFull值.非管理员用户的值为TokenElevationTypeDefault.

http://www.davidmoore.info/2011/06/20/how-to-check-if-the-current-user-is-an-administrator-even-if-uac上有一个完整的C#代码示例-is-ON /