如何使用清单来控制禁用DPI缩放和兼容性

时间:2016-10-25 14:32:28

标签: windows visual-studio-2010 makefile manifest dpi

我有一个清单文件,并在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..."
    )

1 个答案:

答案 0 :(得分:0)

好的,我终于放弃了清单解决方案。就这样,我们使用wix。所以我在安装过程中将一些注册表值添加到HKLM-&gt; SOFTWARE-&gt; Microsoft-&gt; Windows NT-&gt; CurrentVersion-&gt; AppCompatFlags-&gt;图层。