我有一个以正常权限运行的EXE,但有些情况(例如使用VSS /卷影复制)我需要管理员权限(如果我没有记错的话)
我们的想法是将需要额外权限的代码放在单独的EXE中,然后根据需要启动它。
这是我很少需要的东西,但我仍然需要将它作为最后的选择(这就是说我很少需要调用它,平均每天一次/两次)
我的问题是:如何从正常的EXE调用管理员提升的流程?
答案 0 :(得分:7)
在Vista及更高版本启用UAC时,最好的选择是为第二个EXE提供一个UAC清单(最好是作为资源嵌入,但也可以使用外部.manifest文件完成)来设置{{1} }值为requestedExecutionLevel
。然后你可以正常requireAdministrator
EXE文件。如果无法提供清单,或者您需要支持XP和/或非UAC设置,则可以使用CreateProcess()
来指定ShellExecute/Ex()
动词。在任何这些设置下,操作系统将提示用户提供权限和帐户凭据,然后根据需要将适当的安全权限应用于新进程。
另一个选项是本文提供的第三方"runas"
(和CreateProcess...Elevated()
)实现: