2013-02-26 92 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沒有任何地方使用

相關問題