【发布时间】:2016-10-25 14:32:27
【问题描述】:
我有一个清单文件,并使用 makefile 中的 mt 命令将其添加到我的一个 exe 文件中。安装后。如果我使用 DPI Awareness Enabler 或检查 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 中的注册表,它不会显示任何有趣的内容。通常,如果我手动将兼容性设置为 Windows 7 并在文件属性中禁用 DPI 缩放,它将显示在 DPI Awareness Enabler 和注册表中。
所以我是否正确假设 register 仅链接到 GUI 而不是实际文件?就像我使用 mt 命令从 exe 中提取清单文件一样,我可以看到我的原始清单文件。
首先,我认为我的清单文件没有按预期工作。我测试它的方法是重现应用程序中的错误。解决方法是将兼容性设置为 Windows 7 并在文件属性中禁用 DPI 缩放。如果我只是使用已安装的文件,即使嵌入了清单文件,也不能解决问题。但是如果我在属性中手动更改它,它就解决了这个错误。
一些额外的信息,该应用程序是使用 VS2010 构建的,带有修补程序以修复清单警告。不知道是不是这个原因。
任何帮助将不胜感激。
这是清单文件
<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
</application>
</compatibility>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
这是Makefile中的部分
ADD_CUSTOM_COMMAND(
TARGET myExe
POST_BUILD
COMMAND "mt.exe" -manifest \"${CMAKE_SOURCE_DIR}\\res\\dpiaware.manifest\" -inputresource:\"$<TARGET_FILE:myExe>\"\;\#1 -outputresource:\"$<TARGET_FILE:myExe>\"\;\#1
COMMENT "Adding display aware manifest..."
)
【问题讨论】:
-
mt.exe 的可用性与铅气球相比是不利的。您不能同时使用 -manifest 和 -inputresource。后者获胜,现在您只是嵌入了 EXE 文件中已经存在的相同清单。省略 -inputresource 参数以获得成功。
-
我不确定。从 MSDN 看来,您似乎可以使用 -inputresource 和 -manifest 运行 mt。 msdn.microsoft.com/en-us/library/windows/desktop/… 不过我会试一试的。
标签: windows visual-studio-2010 makefile manifest dpi