我有两个用Delphi编写的应用程序。第一个exe(使用用户界面)使用ShellExecuteEx()调用另一个,后者作为后台进程运行。
当第一个exe调用第二个exe时,会发生以下两种情况之一:
当我以管理员身份登录时,UAC对话框会显示“允许/取消”提示。选择允许继续执行。
如果我以非管理员身份登录,则会显示管理员凭据对话框,我需要输入管理员用户名/密码才能继续。
在这两种情况下,我希望第二个exe在没有任何用户干预的情况下运行。我怎样才能成功呢?
是的,我尝试按照SUA工具的建议应用ElevateCreateProcess缓解,但它似乎不起作用 - 行为和以前一样。
感谢您的帮助。
答案 0 :(得分:1)
需要使用提升的权限启动第一个EXE,以在没有UAC提示的情况下调用第二个EXE。或者......您可以使用第二个EXE的清单告诉Vista它不是管理工具,而只是以当前用户身份运行。
保存为Second.exe.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Vista UAC Support -->
<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
<ms_asmv2:security>
<ms_asmv2:requestedPrivileges>
<ms_asmv2:requestedExecutionLevel level="asInvoker" />
</ms_asmv2:requestedPrivileges>
</ms_asmv2:security>
</ms_asmv2:trustInfo>
</assembly>
答案 1 :(得分:1)
第二个文件的文件名是什么?
Vista假定某些文件名需要管理员权限 - 最明显的是名称为“setup”或“install”的文件。
另外:如果你想要的是能够运行具有管理员权限的程序而不让Vista抛出UAC提示,那么你就不走运了。如果可能的话,这将严重违反安全规定。
您的第二个程序是否需要管理员权限?
当您尝试直接从资源管理器执行第二个程序时会发生什么? UAC提示?如果是这样,那么Vista正试图以管理员身份运行它,要么是因为文件的文件名,要么是因为清单(内部或外部)请求。
答案 2 :(得分:0)
是的,您需要一个类似于此
的应用程序清单<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="UacTest" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
记下“requestedExecutionLevel”标记