对于帐户类型“管理员”,IsInRole始终返回“用户”

时间:2014-04-08 13:46:17

标签: c#

我使用以下代码测试当前用户是否具有管理员权限:

WindowsIdentity winIdentity = WindowsIdentity.GetCurrent();
WindowsPrincipal winPrincipal = new WindowsPrincipal(winIdentity);

return (winPrincipal.IsInRole("Administrator") || 
   winPrincipal.IsInRole("BUILTIN\\Administrators") ||
   winPrincipal.IsInRole(WindowsBuiltInRole.Administrator) || 
   winPrincipal.IsInRole(WindowsBuiltInRole.PowerUser));

不知何故,这总是返回False(没有管理员)。

我正在测试的用户拥有帐户类型"管理员" (在Windows 8.1 / 64和Windows 2008/64上测试)。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

即使帐户是管理员类型,也不意味着当前角色将是管理员的角色。这纯粹是为了保护,因此您不会以管理员身份使用完全权限来持续运行所有内容。

该技术简称为User Account Control或UAC,是Microsoft处理管理员帐户访问保护的方式。

因此,如果您得到的结果是您不是管理员,那么当提升到管理员权限时,您就不会运行该过程。您通常可以通过右键单击并选择“以管理员身份运行”来更改它。

如果要从Visual Studio启动它,可以以管理员身份运行VS,以使正在调试的程序也得到提升。

最后,当使用IsInRole的字符串重载时,您应该检查BUILTIN\Administrators而不是Administrator。更好的解决方案是使用WindowsBuiltInRole overload