我们有一个安装程序用于我们的应用程序。 (在VisualStudio 2012中创建的C ++程序。)安装程序现已签名并需要提升权限 - 用户可以获得一个简洁的UAC问题。
对于某些客户,安装程序需要很多其他文件。我们使用IExpress创建自解压存档。用户运行自解压EXE文件,解压缩文件并启动安装程序。
但在我们添加UAC支持后,这不起作用。由IExpress构建的EXE不会启动需要提升权限的程序。
一个简单的解决方案是IExpress构建的EXE也需要提升权限。但我没有找到IExpress的旗帜那样做。 (或者我错过了什么?)
是否有一种简单的方法可以将“需要提升的权限”添加到现有的EXE文件中?
答案 0 :(得分:2)
一种相当简单的方法似乎是通过cmd.exe
。只需更改安装程序,例如:
setup.exe
到
cmd /c setup.exe
然后IExpress“魔术UAC检测”将不会发生,用户将在程序运行时获得标准的UAC提示。
如果您想了解更多...
新版本的IExpress包含一个清单,它故意不为IExpress生成的包本身请求UAC提升。以下是wextract.exe
(实际捆绑在生成的包中的部分)的样子:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
According to MSDN,asInvoker
级意味着:应用程序将以与启动它的进程相同的权限运行。
显然有一些程序可以在事后修改清单。一个叫做ResEdit,虽然我建议你download it from SoftPedia,因为.net网站现在似乎带有一些广告软件。我没有任何运气(我认为因为我没有安装Visual Studio)但也许它适合你。
如果您决定采用此路线,请尝试将level
更改为requireAdministrator
。
答案 1 :(得分:0)
您可以在iexpress向导的安装后命令中尝试此操作:-
PowerShell -windowstyle hidden -command "Start-Process -Wait setup.exe -Verb Runas"
-隐藏的Windowstyle隐藏Powershell窗口。
-等待等待setup.exe完成,然后再删除临时文件(默认情况下会提取iexpress文件)
-Verb Runas请求海拔。