我有自己的安装程序应用程序。为了将权限提升为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文件的开头包含有关其原始长度的信息,因此系统可以读取它需要的任何内容并且不会实际触摸附加数据。图标显示正确,所以我认为工作正常。
但我有两个问题:
在某些计算机上(不幸的是我没有,我只有报告),操作系统似乎无法提升权限,安装程序无法写入一些文件。
在安装程序结束后的许多计算机上,系统显示着名的&#34;此软件尚未正确安装...&#34;窗口。
任何想法我做错了什么?
编辑:如果安装程序是&#34;以管理员身份运行&#34;通过右键单击菜单,它完成没有问题。 Edit2:安装程序也已签名,Windows正确读取签名。
答案 0 :(得分:0)
显然将它作为这样的资源嵌入是行不通的。可以使用此命令验证清单:
mt.exe -inputresource:blablabla.exe;#1 -out:extracted.manifest
但是直接从MSVC内部的Linker / Manifest文件页面使用它,但没有实际的清单文件,它会生成一些。