【问题标题】:How to find out if user has administrator privileges or not?如何确定用户是否具有管理员权限?
【发布时间】:2011-11-14 21:14:20
【问题描述】:
我用 C# 创建了一个程序,允许您更改 Windows 7 登录屏幕的背景。
程序必须在 System32 文件夹中创建一个新文件夹,并将文件移到那里。我在我的个人机器上对此没有任何问题,但我在朋友的机器上测试它并拒绝创建目录。
他的帐户类型是管理员,但我唯一能想到的是他缺少我在计算机上启用的某种权限。
所以我想知道是否有办法检查用户拥有哪些权限?或者一种绕过它的方法。提前致谢!
【问题讨论】:
标签:
c#
windows
impersonation
【解决方案1】:
要检测这一点,您可以像这样获取 WindowsIdentity 对象:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
然后通过以下方式创建一个 WindowsPrincipan 实例:
WindowsPrincipal principal = new WindowsPrincipal(identity);
最后使用 IsInRole() 方法进行检查,如下所示:
string role = "BUILTIN\\Administrators";
bool IsAdmin = principal.IsInRole(role));
然后您可以使用 IsAdmin 变量来确定当前用户是否为管理员。
来源 - http://csharptuning.blogspot.com/2007/09/detecting-is-current-user-is.html
【解决方案2】:
问题是 UAC。这是一项需要提升的操作。虽然用户属于管理员组,但默认情况下会为该进程分配一个标准用户令牌。
解决方案是将requireAdministrator 选项添加到应用程序的清单中,以便应用程序调用 UAC 提升对话框。