2013-02-26 3 views
3

XP/2003/Vista/7/2008/8/2012에서 실행해야하는 Windows Forms 응용 프로그램이 있으며 사용자가 큰 글꼴을 선택하거나 높은 DPI app.manifest에서 DPI 인식을 사용하도록 설정하면 Vista 이상에서 제대로 작동하지만 XP/2003에서는 응용 프로그램이 지원되지 않는 매니페스트 입력으로 인해 오류를보고합니다.Windows XP/2003에서 작동하도록 dpiAware 실행 파일이 필요합니다.

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. 

는 매니페스트를 선언하는 것이 가능

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

윈도우 2003 원인이 오류 메시지가 매니페스트와 응용 프로그램을 실행 XP/2003에서 지원하지 않는 매니 페스트의이 부분을 무시할 수있는 방법으로? 또는 매니페스트를 제거하고 SetProcessDPIAware에 대한 조건부 호출을해야합니다 (읽은 모든 항목에서 해당 API 함수를 사용하지 말 것을 권장합니다).

+1

번호 지원 십 + 세의 운영 체제를 사용하지 않는 손실 제안. 당신은 SetProcessDPIAware가 야기 할 수있는 초기화 경쟁 문제에 대해 거의 두려워하지 않는다. just-in-time 컴파일러는 그 함정을 피하면서 많은 도움이된다. 그냥 Main() 메서드에서 pinvoke. –

+2

세계에는 여전히 많은 Windows XP 및 Server 2003이 있으므로 그것이 그대로입니다. SetProcessDPIAware가 정상적으로 작동합니다. 새로운 OS 버전에서 dpiAware 매니페스트 작업을 수행하고 이전 OS 버전에서는 무시해 버릴 수있는 방법이 있었으면 좋겠다고 생각했지만 특정 벽에 맞서려하지 않았습니다. –

+0

그건 이상합니다. 내 응용 프로그램 중 하나에 대한 매니페스트 파일에' true '를 사용하고 Windows 2000에서 다시 정상적으로 실행됩니다.이 응용 프로그램은 .NET WinForms가 아닌 기본 C++ 응용 프로그램이므로 가정합니다. 매니페스트 파일 정보를 읽고 오류를 던지고있는 .NET Framework (Windows 이벤트 로그에 기록 된 내용이 있는지 확인할 필요가 없습니다. 응용 프로그램이 실행되는데 너무 신경 쓰지 않아도됩니다.) –

답변

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가 될 얻을 않습니다 어디서나