【问题标题】:Check if a program is started via "Run as Administrator" or not检查程序是否通过“以管理员身份运行”启动
【发布时间】:2021-08-28 14:04:18
【问题描述】:

我想检测我的程序是否通过“以管理员身份运行”启动。在两台机器上,它的工作原理是:

new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()).IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)

因为当我运行程序时,默认情况下它们不会以管理员身份运行,所以我可以这样检查。

但是在另一台机器上(这台机器禁用了 Win7 和 UAC),当我在那里启动任何程序时,它会自动以管理员权限启动,而无需“右键单击 -> 以管理员身份运行”。我可以以某种方式过滤掉这个实例吗?

背景很简单,在第一次启动时,它应该阻止用户启动它,但如果用户每次启动它都会提升它,它不应该关心。

希望这是有道理的, 马蒂

【问题讨论】:

  • 我 99% 确定答案是否定的。当您的程序启动时,令牌就位(并且它是“管理员”(如果用户具有管理员权限)或“标准用户”(减少权限)令牌)。您可以检查您的程序是否有权做某事,但仅此而已。您还可以显示您的应用程序以影响如何做出“使用哪个令牌”决定。我并没有完全遵循您的理由-也许您可以更好地解释一下。除了@JohnWu的链接,看看:docs.microsoft.com/en-us/windows/security/identity-protection/…
  • 是的,但背景只是在第一次启动时它会创建一个设置文件,如果在第一次启动时它会在拥有管理员权限的情况下创建此文件,稍后尝试仅使用用户权限更改此文件不可能

标签: c# .net


【解决方案1】:

我发现“HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”中注册表中的“EnableLUA”设置实际上设置为 0,因此 UAC 被完全禁用并以管理员身份启动所有内容,所以我将只需额外检查此值是否为 1 :)

【讨论】:

    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 2011-07-04
    • 2017-09-15
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2011-08-10
    相关资源
    最近更新 更多