Vista:EXE可以在调用另一个EXE时绕过用户确认吗?

时间:2009-06-18 17:24:31

标签: delphi windows-vista uac createprocess

我有两个用Delphi编写的应用程序。第一个exe(使用用户界面)使用ShellExecuteEx()调用另一个,后者作为后台进程运行。

当第一个exe调用第二个exe时,会发生以下两种情况之一:

  1. 当我以管理员身份登录时,UAC对话框会显示“允许/取消”提示。选择允许继续执行。

  2. 如果我以非管理员身份登录,则会显示管理员凭据对话框,我需要输入管理员用户名/密码才能继续。

  3. 在这两种情况下,我希望第二个exe在没有任何用户干预的情况下运行。我怎样才能成功呢?

    是的,我尝试按照SUA工具的建议应用ElevateCreateProcess缓解,但它似乎不起作用 - 行为和以前一样。

    感谢您的帮助。

3 个答案:

答案 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”标记