0

我有一个以正常权限运行的 EXE,但在某些情况下(例如使用 VSS/卷影副本)我需要管理员权限(如果我没记错的话)

这个想法是将需要额外权限的代码放在单独的 EXE 中,并根据需要启动它。

这是我很少需要的东西,但我仍然需要将它作为最后的选择(也就是说我很少需要调用它,可能平均每天一次/两次)

我的问题是:如何从普通 EXE 调用管理员提升的进程?

4

1 回答 1

7

在启用 UAC 的 Vista 和更高版本上,最好的选择是为第二个 EXE 提供 UAC 清单(最好作为资源嵌入,但也可以使用外部 .manifest 文件完成),将requestedExecutionLevel值设置为requireAdministrator. 然后你就可以CreateProcess()正常的EXE文件了。如果提供清单不是一个选项,或者如果您需要支持 XP 和/或非 UAC 设置,那么您可以使用ShellExecute/Ex()指定"runas"动词来代替。在任何这些设置下,操作系统都会提示用户输入权限和帐户凭据,然后根据需要将适当的安全权限应用于新进程。

另一种选择是本文中提供的第三方CreateProcess...Elevated()(和ShellExecute...Elevated())实现:

Vista UAC:权威指南

于 2013-01-02T22:38:46.287 回答