如何确定用户是否具有管理员权限?

时间:2011-11-14 21:14:21

标签: c# windows impersonation

我在C#中创建了一个程序,允许您更改Windows 7登录屏幕的背景。

程序必须在System32文件夹中创建一个新文件夹,并在那里移动文件。我在我的个人计算机上没有问题,但是我在朋友机器上测试它并拒绝创建目录。

他的帐户类型是管理员,但我唯一能想到的是他错过了我在计算机上启用的某种特权。

所以我想知道是否有办法检查用户拥有哪些权限?或者一种绕过它的方法。提前谢谢!

2 个答案:

答案 0 :(得分:3)

要检测到这一点,您可以像这样获取WindowsIdentity的对象:

WindowsIdentity identity = WindowsIdentity.GetCurrent();

然后通过以下方式创建WindowsPrincipan实例:

WindowsPrincipal principal = new WindowsPrincipal(identity);

最后通过使用IsInRole()方法检查它:

string role = "BUILTIN\\Administrators";
bool IsAdmin = principal.IsInRole(role));

然后您可以使用IsAdmin变量来确定当前用户是否为Admin。

来源 - http://csharptuning.blogspot.com/2007/09/detecting-is-current-user-is.html

答案 1 :(得分:2)

问题是UAC。这是一项需要提升的操作。虽然用户位于管理员组中,但默认情况下会为该过程提供标准用户令牌。

解决方案是将requireAdministrator选项添加到应用程序的清单中,以便应用程序调用UAC提升对话框。