安装程序清单嵌入问题

Installer manifest embedding problems

我有自己的安装程序。为了提升管理员权限,我有这个 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. 在某些计算机上(不幸的是我没有,我只有报告)OS 似乎并没有真正提升权限并且安装程序无法写入一些文件.

  2. 在许多计算机上,安装程序结束后系统会显示著名的 "This software hasn't been installed correctly..." window。

知道我做错了什么吗?

编辑:如果安装程序是 "run as administrator" 通过右键单击菜单,它可以顺利完成。 Edit2:安装程序也被签名并且签名被 Windows 正确读取。

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

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

但是当直接从 MSVC 中的链接器/清单文件页面使用时它可以工作,没有实际的清单文件,它会自己生成一些。