加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:44:31 所属栏目:百科 来源:网络整理
导读:在我的C#应用??程序中,我需要检查当前用户是否是管理员组的成员.它需要兼容 Windows XP和 Windows 7. 目前,我正在使用以下代码: bool IsAdministrator{ get { WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new
在我的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/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读