如何检查用户是否也是管理员?

时间:2016-08-09 14:22:17

标签: c# clickonce

我有一个ClickOnce应用程序,在启动时我想检查用户是否是管理员。

启动应用程序时,我以自己的身份登录,我的用户是Administrators组的成员。 UAC也已关闭。

我的第一次尝试如下:

var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
var admin = principal.IsInRole(WindowsBuiltInRole.Administrator);

以上都没有奏效。通过所有内置角色,只有WindowsBuiltInRole.User会返回true。所以第二次尝试如下:

var identity = WindowsIdentity.GetCurrent();
foreach (var role in identity.Groups)
{
    if (role.IsValidTargetType(typeof(SecurityIdentifier)))
    {
        var sid = role.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;
        if (sid.IsWellKnown(WellKnownSidType.AccountAdministratorSid) || sid.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid) )
        {
            admin = true;
            break;
        }
    }
}

这第二次尝试也没有奏效。 admin保留false

为了进一步测试上述内容,我创建了一个新用户,并仅将他添加到Administrators组。他不在Users组。启动应用程序,因为此新用户仍将返回false

上述代码返回true的唯一时间,即。用户是管理员,当我登录并启动应用程序和预安装的Administrator用户帐户时。

当我UAC关闭时,我不应该处理拆分令牌。

与应用程序相关的问题是ClickOnce应用程序吗?

是否有一种方式(实际上有效)将返回用户是否实际上是管理员(注意:用户可以是Domain Admins组的一部分而不是本地管理员)?

0 个答案:

没有答案