【发布时间】: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/…
-
是的,但背景只是在第一次启动时它会创建一个设置文件,如果在第一次启动时它会在拥有管理员权限的情况下创建此文件,稍后尝试仅使用用户权限更改此文件不可能