【问题标题】:Cannot detect if a user is running with elevated privileges, when no UAC popup当没有 UAC 弹出窗口时,无法检测用户是否以提升的权限运行
【发布时间】:2012-08-10 22:07:28
【问题描述】:

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

我检查了 5 台机器上的解决方案,其中 4 台运行良好。

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

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

那台机器有问题吗?

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

【问题讨论】:

  • 我会检查机器是否有所有最新的服务包等,然后再试一次。
  • 有一些替代解决方案可以检查 UAC here。是否可以尝试其中一种,看看是否有效?
  • 在我看来,这台计算机有问题,而不是代码有问题。如果您明确将其配置为提示,您应该会收到 UAC 提示。你不。这表明系统本身存在问题。
  • 您是否尝试在该机器上运行其他需要提升的程序?你得到他们的 UAC 提示了吗?它们是否按预期工作?

标签: c# .net uac


【解决方案1】:

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

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

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

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

【讨论】:

  • +1 干得好。 OP 链接到的问题让我在扫描它时有点困惑,因为它有一个非常误导性的标题。
【解决方案2】:

问起来可能有点傻,但是你把UAC改成总是通知我之后,你重启机器了吗?

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

试一试,同时检查this linkthis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 2012-12-05
    • 1970-01-01
    • 2011-12-20
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多