我有一个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
组的一部分而不是本地管理员)?