【问题标题】:Run as Administrator vs. Administrator group以管理员身份运行与管理员组
【发布时间】:2012-11-22 13:57:55
【问题描述】:

我有一个 C# 应用程序需要允许用户更改 计算机名。这是一个非常特权的操作。如果用户以管理员身份运行应用程序(Windows 7,右键单击可执行文件,“以管理员身份运行”),我只能让它工作。很好,但是用户是管理员,那么他们为什么需要以管理员身份运行 AS?我已经试过好几次了。如果用户(管理员)尝试正常运行应用程序,它总是会失败。如果他们以“以管理员身份运行”运行它,它总是有效的。

如果答案是“它就是这样工作的,即使你是管理员也必须以管理员身份运行”,我的问题是如何检测它们是否以超级管理员权限运行?我找到了this,但它只是检查用户是否属于管理员用户组,我已经指出,这还不够(并引发空指针异常)。

我在这里遗漏了什么吗?我需要从另一个角度去接近它吗?

【问题讨论】:

  • 听起来像是 UAC 的东西。这篇文章可能会有所帮助:serverfault.com/questions/446521/…
  • C#: Detect if running with elevated privileges?的可能重复项...检查第一个答案
  • 谢谢,spender,但我在评论中链接到那篇文章并解释了为什么它还不够。我知道,乍一看,它看起来像个骗子。 ;)
  • 另一个选项是在编译时将可执行文件标记为需要提升。我会挖出一个链接......aneef.net/2009/06/29/…
  • 好的,我明白了。我看了另一个链接!提升运行整个应用程序会起作用,但您可以选择及时优化策略,只提升应用程序中真正需要提升的部分。

标签: c# windows winapi


【解决方案1】:

这是因为用户帐户控制 (UAC)。在 Vista 中引入,这改变了管理员用户帐户的操作方式。

当管理员组中的用户登录时,会为该用户分配两个令牌:一个具有所有权限的令牌,一个具有降低权限的令牌。当该用户创建一个新进程时,默认情况下,该进程将获得降低的权限令牌。因此,尽管用户具有管理员权限,但默认情况下她不会行使这些权限。这是一件“好事”™。

要行使这些权利,用户必须以提升的权限启动该过程。例如,通过使用“以管理员身份运行”动词。当她这样做时,完整的令牌将交给新进程,并且可以行使全部权利。

您几乎肯定不想检测您的进程是否在提升运行。最佳做法是标记程序中需要提升的部分,并在程序的这些部分执行时强制系统显示 UAC 提升对话框。

绑定是提升只能在进程启动时发生。因此,如果您需要将应用程序拆分为需要提升的部分和不需要提升的部分,则需要多个进程。虽然您可以将整个应用程序标记为需要提升,但如果需要提升的唯一事情是更改计算机名称的极少数情况,则不应这样做。

下一步是在 MSDN 上详细了解详细信息。例如:

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2010-11-26
    • 2012-05-28
    • 2011-03-24
    • 2021-08-10
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多