c# – 如何确定用户是否是管理员,即使不提升

前端之家收集整理的这篇文章主要介绍了c# – 如何确定用户是否是管理员,即使不提升前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的C#应用​​程序中,我需要检查当前用户是否是管理员组的成员.它需要兼容 Windows XP和 Windows 7.

目前,我正在使用以下代码

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

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

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

解决方法

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

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

> TokenElevationTypeDefault = 1
> TokenElevationTypeFull = 2
> TokenElevationTypeLimited = 3

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

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

猜你在找的C#相关文章