如何向现有EXE文件添加“需要提升的权限”? (或者我可以在运行IExpress时设置它吗?)

时间:2015-05-28 08:58:39

标签: exe uac elevated-privileges iexpress

我们有一个安装程序用于我们的应用程序。 (在VisualStudio 2012中创建的C ++程序。)安装程序现已签名并需要提升权限 - 用户可以获得一个简洁的UAC问题。

对于某些客户,安装程序需要很多其他文件。我们使用IExpress创建自解压存档。用户运行自解压EXE文件,解压缩文件并启动安装程序。

但在我们添加UAC支持后,这不起作用。由IExpress构建的EXE不会启动需要提升权限的程序。

一个简单的解决方案是IExpress构建的EXE也需要提升权限。但我没有找到IExpress的旗帜那样做。 (或者我错过了什么?)

是否有一种简单的方法可以将“需要提升的权限”添加到现有的EXE文件中?

2 个答案:

答案 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 MSDNasInvoker级意味着:应用程序将以与启动它的进程相同的权限运行。

显然有一些程序可以在事后修改清单。一个叫做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请求海拔。