winforms - 需要 dpiAware 可执行文件才能在 Windows XP/2003 中工作

标签 winforms manifest windows-server-2003 dpi

我有一些 Windows 窗体应用程序需要在 XP/2003/Vista/7/2008/8/2012 上运行,并且当用户选择大字体或更高的 DPI 时应该仍然看起来不错。在 app.manifest 中启用 DPI 感知对于 Vista 及更高版本效果很好,但在 XP/2003 上,应用程序会由于不受支持的 list 条目而报告错误。

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <asmv1:application>
    <asmv1:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv1:windowsSettings>
  </asmv1:application>
</asmv1:assembly>

在 Windows 2003 上运行具有该 list 的应用程序会导致此错误消息:

This application has failed to start because the application
configuration is incorrect.

并且记录了此 Windows 事件消息:

The element asmv1:application appears as a child of element
urn:schemas-microsoft-com:asm.v1^assembly which is not supported
by this version of Windows.

是否可以以允许 XP/2003 忽略它们不支持的这部分 list 的方式来声明 list ?或者我必须删除 list 并对 SetProcessDPIAware 进行有条件调用(即使我读过的所有内容都建议不要使用该 API 函数)?

最佳答案

我最终得到了这个 list

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
  <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:windowsSettings
         xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>True/PM</dpiAware>     
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

Delphi 特定条件:使用运行时主题已关闭且 xpman.pas 未在任何地方使用

关于winforms - 需要 dpiAware 可执行文件才能在 Windows XP/2003 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096400/

相关文章:

c# - 在 C# 中将列表列表作为类使用

Android action.MAIN 和 category.LAUNCHER 函数

java - 将 api 级别 android 版本从 8 更改为 12 时出错

asp.net - 创建新站点时,您如何告诉 IIS 6 将 .NET 版本设置为 2.0(而不是 1.1)?

c# - C#中如何从特定字符串中获取子字符串

c# - WS_EX_COMPOSITED 和滚动条在拖动时不绘制

c# - 授予网络服务回收 iis 应用程序池的权限

windows - LDAP 是 TCP 还是 UDP 协议(protocol)?

c# - 在不更改标题文本对齐方式的情况下,将 Windows 窗体 C# 中的 Listview 列的文本右对齐

c# - 从 .acf/manifest 文件读取值