我正在尝试将这个清单添加到我编译好的PyInstaller可执行文件中:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity name="TestApp" processorArchitecture="amd64" type="win32" version="1.0.0.0"/>
<dependency>
<dependentAssembly>
<assemblyIdentity language="*" name="Microsoft.Windows.Common-Controls" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" type="win32" version="6.0.0.0"/>
</dependentAssembly>
</dependency>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
当我使用PyInstaller的--manifest选项时,它没有被添加到生成的EXE或组合在生成的清单文件中。在构建过程中,我甚至找不到一行代码表明它正在处理清单文件。然后我使用MT.exe嵌入了清单文件,并且没有出现错误。这个清单文件是由PyInstaller生成的一个修改版本。我不得不删除兼容性部分,因为MT.exe说在兼容性命名空间中没有兼容性选项......我添加了声明应用程序具有dpiAware的部分。当我这样做后,我可以看到清单部分已经添加到ResourceHacker中,但当我运行程序时,它会提示无法打开自身并且无法运行。当我使用ResourceHacker嵌入清单时,程序将加载,但在DPI缩放打开的情况下仍然比屏幕大,就好像它忽略了清单文件。我使用的是Python 3.5.1和Kivy 1.9.1。
logger.info("覆盖默认清单")
os.chmod(tmpnm, 0o755)
在spec文件中:manifest_override="你的清单文件名和路径,用引号括起来"
(不包括括号) - Thomas