CNP*_*CNP 3 python manifest pyinstaller
我正在尝试将此清单添加到我的 PyInstaller 编译的 EXE 中:
<?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>
Run Code Online (Sandbox Code Playgroud)
当我使用 PyInstaller 的 --manifest 选项时,它不会添加到 EXE 或合并到生成的清单文件中。我什至找不到一行说它在构建期间对清单做任何事情。然后我使用 MT.exe 嵌入没有错误的清单。此清单文件是对 PyInstaller 生成的文件的修改。我不得不删除兼容性部分,因为 MT.exe 说命名空间兼容性中没有兼容性选项......我添加了该部分以声明应用程序具有 dpiAware。执行此操作后,我可以看到使用 ResourceHacker 添加的清单部分,但是当我运行该程序时,它说无法打开 self 并且无法运行。当我使用 ResourceHacker 嵌入清单时,程序将加载但仍然比打开 DPI 缩放的屏幕大,就像它只是忽略了清单文件。
小智 5
我有同样的问题,使用 Pyinstaller 3.3。这里给出了解释,我调整了他们的答案,将其更新为 Pyinstaller 3.3,作为一种笨拙的解决方法。不幸的是,他们的解决方案需要编辑 Pyinstaller 源代码。
<python install root>\Lib\site-packages\PyInstaller\building\api.py
在 Pyinstaller 中编辑源文件,所以 assemble 方法的开头是这样的:
def assemble(self):
logger.info("Building EXE from %s", self.tocbasename)
trash = []
if os.path.exists(self.name):
os.remove(self.name)
if not os.path.exists(os.path.dirname(self.name)):
os.makedirs(os.path.dirname(self.name))
exe = self.exefiles[0][1] # pathname of bootloader
if not os.path.exists(exe):
raise SystemExit(_MISSING_BOOTLOADER_ERRORMSG)
# BEGINNING OF CHANGES
if self.manifest_override != False:
print "Overriding default manifest"
tmpnm = tempfile.mktemp()
shutil.copy2(exe, tmpnm)
os.chmod(tmpnm, 0755)
winmanifest.UpdateManifestResourcesFromXMLFile(tmpnm, self.manifest_override, names=[1], languages=[1033])
exe = tmpnm
trash.append(tmpnm)
# END OF CHANGES
if is_win and (self.icon or self.versrsrc or self.resources):
Run Code Online (Sandbox Code Playgroud)
也在 api.py 中标记的部分
# Available options for EXE in .spec files
Run Code Online (Sandbox Code Playgroud)
添加
self.manifest_override = kwargs.get('manifest_override', False)
Run Code Online (Sandbox Code Playgroud)
最后在 EXE 部分的规范文件中添加:
manifest_override=[NAME AND PATH OF YOUR MANIFEST FILE IN QUOTES]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3573 次 |
最近记录: |