使用“正常”非提升权限的提升权限启动EXE?

时间:2013-01-02 22:30:22

标签: delphi delphi-2010 privileges

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

我们的想法是将需要额外权限的代码放在单独的EXE中,然后根据需要启动它。

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

我的问题是:如何从正常的EXE调用管理员提升的流程?

1 个答案:

答案 0 :(得分:7)

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

另一个选项是本文提供的第三方"runas"(和CreateProcess...Elevated())实现:

Vista UAC: The Definitive Guide