安装程序清单嵌入问题

时间:2018-04-15 16:30:10

标签: windows winapi installer manifest

我有自己的安装程序应用程序。为了将权限提升为admin,我有这个RC文件:

2 ICON "icon.ico"
1 RT_MANIFEST "setup.exe.manifest"

以下清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
      <!--This Id value indicates the application supports Windows Vista functionality -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
      <!--This Id value indicates the application supports Windows 7 functionality-->
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--This Id value indicates the application supports Windows 8 functionality-->
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <!--This Id value indicates the application supports Windows 8.1 functionality-->
        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!--The ID below indicates application support for Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application> 
  </compatibility>

  <asmv3:trustInfo xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:security>
      <asmv3:requestedPrivileges>
        <asmv3:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </asmv3:requestedPrivileges>
    </asmv3:security>
  </asmv3:trustInfo>

</assembly>

使用MSVC 2017编译安装程序,然后将实际数据附加到setup.exe文件中。我假设EXE文件的开头包含有关其原始长度的信息,因此系统可以读取它需要的任何内容并且不会实际触摸附加数据。图标显示正确,所以我认为工作正常。

但我有两个问题:

  1. 在某些计算机上(不幸的是我没有,我只有报告),操作系统似乎无法提升权限,安装程序无法写入一些文件。

  2. 在安装程序结束后的许多计算机上,系统显示着名的&#34;此软件尚未正确安装...&#34;窗口。

  3. 任何想法我做错了什么?

    编辑:如果安装程序是&#34;以管理员身份运行&#34;通过右键单击菜单,它完成没有问题。 Edit2:安装程序也已签名,Windows正确读取签名。

1 个答案:

答案 0 :(得分:0)

显然将它作为这样的资源嵌入是行不通的。可以使用此命令验证清单:

mt.exe -inputresource:blablabla.exe;#1 -out:extracted.manifest

但是直接从MSVC内部的Linker / Manifest文件页面使用它,但没有实际的清单文件,它会生成一些。