当没有UAC弹出窗口时,无法检测用户是否使用提升的权限运行

时间:2012-08-14 15:06:07

标签: c# .net uac

我正在开发一个C#应用程序,需要检测用户是否以提升的管理员身份运行。我尝试了Steven建议的solution

我在5台机器上检查了解决方案,并且其中4台机器正常工作。

即使我将用户帐户控制设置为Always notify me,也有一台机器永远不会显示UAC通知消息。

检查该计算机上的代码时,即使我选择run as administrator,它也不起作用,方法IsProcessElevated返回false。

该特定机器有问题吗?

有没有办法在这种平台上确定用户是否被提升?

2 个答案:

答案 0 :(得分:10)

经过研究后,我发现从Windows 7开始,为了确定用户是否是提升的管理员,您只需要检查以下内容:

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole (WindowsBuiltInRole.Administrator);

(如果此选项失败,可以使用检查令牌的其余代码) 我在一些机器上测试了代码,它运行正常。

我的应用程序仅在win7及更高版本上运行,所以这个解决方案对我来说已经足够了。

答案 1 :(得分:0)

要问可能很傻,但是在你更改UAC后总是通知我,你重启机器了吗?

我遇到了同样的问题,问题出在Windows本身,因为除非重新启动计算机,否则不会更改UAC状态。

试一试,还要检查this linkthis