2013-02-26 90 views
3

我有一些需要在XP/2003/Vista/7/2008/8/2012上运行的Windows Forms应用程序,并且在用户选择大字体或更高的DPI。在app.manifest中启用DPI感知适用于Vista及更高版本,但在XP/2003上,由于不支持的清单条目,应用程序会报告错误。需要dpiAware可执行文件在Windows XP/2003下工作

<?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会导致此错误消息:

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忽略他们不支持的这部分清单?或者我必须删除清单并对SetProcessDPIAware进行有条件的调用(即使我读过的所有内容建议不要使用该API函数)?

+1

号配套10多年历史的老操作系统不得到是一个有损命题。您几乎不用担心SetProcessDPIAware可能导致的初始化竞争问题,即时编译器可以帮助避免陷阱。只需在您的Main()方法中解决它。 – 2013-02-26 18:51:25

+2

世界上还有很多Windows XP和Server 2003,所以它就是这样。 SetProcessDPIAware工作正常。我希望有一种方法可以在新操作系统版本中使dpiAware清单能够工作,并且在旧操作系统版本中可以忽略,但我并不打算在这个特定的墙上击败我的头。 – 2013-02-26 23:02:27

+0

这很奇怪。我在我的一个应用程序的清单文件中使用' true',它在Windows 2000上一直运行良好。当然,这是一个本地C++应用程序,而不是.NET WinForms,所以我认为它是。正在读取清单文件信息并抛出错误的.NET Framework。 (我没有检查过Windows事件日志以查看是否有记录,可能是,我并不太在意这个;应用程序运行文件。) – 2016-07-01 13:59:03

回答

0

我结束了这个清单

<?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> 

德尔福特定条件:使用运行时的主题是关闭的,xpman.pas没有任何地方使用

相关问题