如何为VS2022中的C++项目创建支持Per Monitor v2 DPI感知的清单文件?
为VS2022 C++程序创建Per Monitor v2 DPI感知清单的方法
方法1:手动编写完整清单文件
直接创建符合要求的自定义清单,无需依赖自动生成的文件:
- 在项目根目录新建文本文件,命名为
app.manifest,粘贴以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <!-- 启用Per Monitor v2 DPI感知 --> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware> <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness> </windowsSettings> </application> <!-- 保留VS自动生成的清单核心内容 --> <assemblyIdentity version="1.0.0.0" name="YourApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
- 将
YourApplication.app替换为你的项目名称。 - 配置VS项目:
- 右键项目→属性→配置属性→链接器→Manifest文件→附加清单文件,输入
app.manifest(若文件不在根目录,填写相对路径)。 - 确保生成清单选项设为“是”,VS会自动合并自定义清单和默认生成的依赖项清单。
- 右键项目→属性→配置属性→链接器→Manifest文件→附加清单文件,输入
方法2:提取VS自动生成的中间清单修改
不用C#编译器,直接从C++项目的编译中间文件里获取模板:
- 确保项目已开启“生成清单”(链接器设置里设为“是”),编译一次项目。
- 打开项目的中间输出目录,路径通常是
项目根目录\x64\Debug\obj\(根据你的平台和配置调整)。 - 找到名为
[项目名].exe.intermediate.manifest的文件,复制到项目目录并重命名为custom.manifest。 - 在这个清单里添加Per Monitor v2的配置:在
<assembly>节点内插入以下内容:
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware> <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness> </windowsSettings> </application>
- 按方法1的步骤配置项目使用这个自定义清单。
方法3:用MT工具提取已编译程序的清单
如果你的程序已经嵌入了自动生成的清单,可以用VS自带的Manifest Tool提取并修改:
- 打开VS开发者命令提示符(开始菜单→Visual Studio 2022→Developer Command Prompt for VS 2022)。
- 定位到你的exe所在目录,执行命令提取清单:
mt -inputresource:YourApp.exe;1 -out:extracted.manifest
- 打开
extracted.manifest,添加方法2里的DPI感知配置节点。 - 可以选择直接将修改后的清单嵌入exe:
mt -manifest modified.manifest -outputresource:YourApp.exe;1
或者将修改后的清单添加到项目,按方法1配置VS使用它。
内容的提问来源于stack exchange,提问作者H. Guijt
相关产品推荐
相关产品推荐

