如何使用清单来控制禁用 DPI 缩放和兼容性
How to use manifest to control disable DPI scaling and compatibility
我有一个清单文件并使用 makefile 中的 mt 命令将其添加到我的一个 exe 文件中。安装后。如果我使用 DPI Awareness Enabler 或检查 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 中的注册表,它不会显示任何有趣的内容。通常,如果我手动将兼容性设置为 Windows 7 并在文件 属性 中禁用 DPI 缩放,它将显示在 DPI Awareness Enabler 和注册表中。
那么我是否可以假设寄存器仅链接到 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..."
)
好吧,我终于放弃了清单解决方案。恰好我们使用wix。所以我在安装过程中将一些注册表值添加到 HKLM->SOFTWARE->Microsoft->Windows NT->CurrentVersion->AppCompatFlags->Layers.
我有一个清单文件并使用 makefile 中的 mt 命令将其添加到我的一个 exe 文件中。安装后。如果我使用 DPI Awareness Enabler 或检查 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 中的注册表,它不会显示任何有趣的内容。通常,如果我手动将兼容性设置为 Windows 7 并在文件 属性 中禁用 DPI 缩放,它将显示在 DPI Awareness Enabler 和注册表中。
那么我是否可以假设寄存器仅链接到 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..."
)
好吧,我终于放弃了清单解决方案。恰好我们使用wix。所以我在安装过程中将一些注册表值添加到 HKLM->SOFTWARE->Microsoft->Windows NT->CurrentVersion->AppCompatFlags->Layers.