Delphi 从“普通”非提升权限启动具有提升权限的EXE?

Delphi 从“普通”非提升权限启动具有提升权限的EXE?,delphi,delphi-2010,privileges,Delphi,Delphi 2010,Privileges,我有一个以正常权限运行的EXE,但在某些情况下,例如使用VSS/volume shadow copy,如果我没有弄错的话,我需要管理员权限 其想法是将需要额外权限的代码放在一个单独的EXE中,并根据需要启动它 这是我很少需要的东西,但我仍然需要把它作为最后的选择。也就是说,我很少需要打电话给它,可能平均每天一次/两次 我的问题是:如何从普通EXE调用管理提升的进程?在Vista和以后启用UAC的情况下,最好的选择是为第二个EXE提供一个UAC清单,该清单最好嵌入为资源,但也可以使用一个外部.ma

我有一个以正常权限运行的EXE,但在某些情况下,例如使用VSS/volume shadow copy,如果我没有弄错的话,我需要管理员权限

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

这是我很少需要的东西,但我仍然需要把它作为最后的选择。也就是说,我很少需要打电话给它,可能平均每天一次/两次


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

在Vista和以后启用UAC的情况下,最好的选择是为第二个EXE提供一个UAC清单,该清单最好嵌入为资源,但也可以使用一个外部.manifest文件来完成,该文件将requestedExecutionLevel值设置为RequiredAdministrator。然后您就可以正常地创建和处理EXE文件了。如果不提供清单,或者需要支持XP和/或非UAC设置,则可以使用ShellExecute/Ex指定runas谓词。在任何这些设置下,操作系统都会提示用户输入权限和帐户凭据,然后根据需要对新进程应用适当的安全权限

另一个选项是本文提供的第三方CreateProcess…提升版和ShellExecute…提升版实现:


谢谢你,雷米,如果我添加了一个清单,我能在不提示用户的情况下运行吗?每次我必须调用VSS时都会提示用户,这非常烦人,尤其是我的应用程序应该在不干扰系统的情况下以静默方式运行user@TheDude:当存在清单时,将在EXE首次启动时应用该清单。如果EXE是从另一个非提升进程运行的,则会显示UAC提示以请求权限。这是期望的行为。如果不希望每次都提示,则需要提升调用过程,这可能意味着重新考虑您的设计。如果你不想提升你的主应用,那么你可能需要将你的VSS访问移到后台服务,然后在需要时让你的主应用与之通信。谢谢,是的,这符合我的最终目标,将EXE本身作为服务运行,但我从来没有走过这条路,因为我不熟悉服务,更不用说调试了!我想现在是时候这样做了,只是我不知道如何继续:@TheDude:Start with File>New>Other>Delphi Projects>Service Application。这将创建一个存根服务,然后您可以根据需要扩展它。在Delphi中,有很多用于编写服务的演示和教程。@Remy Lebeau正如我所看到的,M$仅适用于PF和Win文件夹。例如,如果我将程序安装到c:\myprg\p中,则没有任何限制。它对我的客户非常有用——对工作没有任何限制:函数RunAsAdmin