앱(실행 파일) 매니페스트
플랫폼
클라이언트 – Windows 8 서버 – Windows Server 2012
설명
Windows에 도입된 앱(실행 파일) 매니페스트의 호환성 섹션은 운영 체제에서 앱이 대상으로 디자인된 Windows 버전을 결정하는 데 도움이 됩니다. 또한 앱 매니페스트를 사용하면 Windows에서 앱이 대상으로 하는 Windows 버전에 따라 앱이 기대하는 동작을 제공할 수 있습니다.
매니페스트의 호환성 섹션을 사용하면 Windows에서 기존 소프트웨어에 대한 호환성을 유지하면서 새로 만든 소프트웨어에 새 동작을 제공할 수 있습니다. 이 섹션은 Windows가 향후 버전의 Windows에서도 더 큰 호환성을 제공하는 데 도움이 됩니다. 예를 들어 호환성 섹션의 Windows 8 대한 지원을 선언하는 앱은 이후 버전의 Windows에서 Windows 8 동작을 계속 수신합니다.
형상
매니페스트에 호환성 섹션이 없는 앱은 기본적으로 Windows 7 및 Windows 8 및 이후 Windows 버전에서 Windows Vista 동작을 갖습니다. Windows XP 및 Windows Vista는 이 매니페스트 섹션을 무시하고 영향을 주지 않습니다.
이러한 Windows 구성 요소는 호환성 섹션에 따라 서로 다른 동작을 제공합니다.
RPC(원격 프로시저 호출) 기본 스레드 풀
Windows 8 및 Windows 7: 확장성을 개선하고 스레드 수를 줄이기 위해 RPC가 NT 스레드 풀(기본 풀)로 전환되었습니다. Windows Vista의 경우 RPC는 프라이빗 스레드 풀을 사용했습니다.
- Windows 7 이상 버전의 Windows용으로 컴파일된 이진 파일의 경우 기본 풀이 사용됩니다.
- RPC API가 호출되기 전에 I_RpcMgmtEnableDedicatedThreadPool 호출되면 프라이빗 스레드 풀이 사용됩니다(Vista 동작).
- RPC 호출 후 I_RpcMgmtEnableDedicatedThreadPool 호출되는 경우 기본 풀이 사용되고 I_RpcMgmtEnableDedicatedThreadPool 오류 1764를 반환하며 요청된 작업은 지원되지 않습니다.
Windows Vista(기본값): Windows Vista 및 이전 버전의 Windows용으로 컴파일된 이진 파일의 경우 프라이빗 풀이 사용됩니다.
DirectDraw 잠금
- Windows 8 및 Windows 7: Windows 7 이상 버전의 운영 체제에 대해 매니페스트된 앱은 DDRAW의 Lock API를 호출하여 기본 데스크톱 비디오 버퍼를 잠글 수 없습니다. 이렇게 하면 오류가 발생하며 주 데이터베이스에 대한 NULL 포인터가 반환됩니다. 이 동작은 데스크톱 창 관리자 컴퍼지션이 켜지지 않은 경우에도 적용됩니다. Windows 7 이상에 대해 선언된 호환성이 있는 앱은 렌더링할 기본 비디오 버퍼를 잠그지 않아야 합니다.
- Windows Vista(기본값): 레거시 앱은 이 동작에 따라 달라지기 때문에 앱이 기본 비디오 버퍼에 대한 잠금을 획득할 수 있습니다. 앱을 실행하면 데스크톱 창 관리자가 꺼집니다.
클리핑 창 없이 기본으로 DirectDraw 비트 블록 전송(비트blt)
- Windows 8 및 Windows 7: Windows 7 이상 버전에 대해 매니페스트된 앱은 클리핑 창 없이 기본 데스크톱 비디오 버퍼에 비트블렛을 수행할 수 없습니다. 이렇게 하면 오류가 발생하며 비트블렛 영역은 렌더링되지 않습니다. Windows는 데스크톱 창 관리자 컴퍼지션을 설정하지 않은 경우에도 이 동작을 적용합니다. Windows 7 이상에 대해 선언된 호환성이 있는 앱은 클리핑 창에 비트블릿을 수행해야 합니다.
- Windows Vista(기본값): 레거시 앱이 이 동작에 따라 달라지기 때문에 앱은 클리핑 창 없이 주 데이터베이스에 비트blt를 수행할 수 있어야 합니다. 이 앱을 실행하면 데스크톱 창 관리자가 꺼집니다.
GetOverlappedResult API
- Windows 8 및 Windows 7: GetOverlappedResult를 사용하는 다중 스레드 앱이 겹치는 구조에서 이벤트를 다시 설정하지 않고 반환할 수 있는 경합 상태를 해결하여 이 함수에 대한 다음 호출이 조기에 반환되도록 합니다.
- Windows Vista(기본값): 앱에 종속성이 있을 수 있는 경합 상태의 동작을 제공합니다. Windows 7 동작 이전에 이 경합을 피해야 하는 앱은 겹치는 이벤트를 대기해야 하며, 신호를 받으면 bWait == FALSE를 사용하여 GetOverlappedResult를 호출해야 합니다.
고대비 모드의 셸 테마 상태
- Windows 8: 고대비 모드에서 실제 테마 상태를 반환합니다.
- Windows 7: DWM이 계속 사용 중이므로 고대비 모드에서 테마를 사용할 수 없는 것으로 반환합니다.
- Windows Vista(기본값): DWM이 계속 사용 중이므로 고대비 모드에서 테마를 사용할 수 없는 것으로 반환합니다.
Shell iPersistFile::Save 메서드
Windows 8: CShellLink::Save는 이제 IPersistFile 처리기가 상대 경로 인수를 사용하여 호출되는지 여부를 결정하고 호출이 실패합니다.
이 동작을 설명하는 공개 설명서는 경로 인수가 절대 경로여야 했음을 나타냅니다.
Windows 7 이하(기본값): CShellLink::Save는 iPersistFile 처리기가 상대 경로 검사를 보내고 앱이 절대 또는 상대 경로로 계속 작업할 수 있도록 허용하는지 여부를 결정하지 않습니다.
프로그램 호환성 도우미(PCA)
- Windows 8: 호환성 섹션이 있는 앱은 PCA 완화를 받지 않습니다.
- Windows 7: 호환성 섹션이 있는 앱은 Windows 8 변경에 대한 잠재적인 호환성 문제에 대해 추적됩니다(이 문서에 설명되어 있음).
- Windows Vista(기본값): 특정 상황에서 런타임 중에 제대로 설치하지 못하거나 크래시가 발생하는 앱은 PCA 완화를 가져옵니다. 자세한 내용은 리소스 섹션을 참조하세요.
기능 기능 활용
운영 체제 지원을 위한 최신 호환성 정보로 앱 매니페스트를 업데이트합니다. 이 섹션에서는 매니페스트에 추가된 내용에 대해 설명합니다.
네임 스페이스: Compatibility.v1(xmlns="urn:schemas-microsoft-com:compatibility.v1">)
섹션 이름: 호환성(새 섹션)
SupportedOS: 지원되는 운영 체제의 GUID - 지원되는 운영 체제에 매핑되는 GUID는 다음과 같습니다.
{e2011457-1546-43c5-a5fe-008deee3d3f0}
Windows Vista의 경우: 스위치백 컨텍스트의 기본값입니다.
{35138b9a-5d96-4fbd-8e2d-a2440225f93a}
Windows 7: 앱 매니페스트에서 이 값을 설정하는 앱은 Windows 7 동작을 가져옵니다.
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}
Windows 8: 애플리케이션 매니페스트에서 이 값을 설정하는 앱은 Windows 8 동작을 가져옵니다.
Microsoft는 필요에 따라 향후 Windows 버전에 대한 GUID를 생성하고 게시합니다.
업데이트된 매니페스트의 XML 예제:
참고
앱 매니페스트의 특성 및 태그 이름은 대/소문자를 구분합니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates app support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates app support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!--The ID below indicates app support for Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
</assembly>
이전 예제의 모든 운영 체제에 대한 GUID는 하위 수준 지원을 제공합니다. 여러 플랫폼을 지원하는 앱에는 각 플랫폼에 대해 별도의 매니페스트가 필요하지 않습니다.
테스트
앱은 지원되는 여러 운영 체제 ID를 지정할 수 있습니다. 해당 운영 체제에서 앱을 테스트했거나 테스트 중인 경우 지원되는 운영 체제 ID를 추가해야 합니다. Windows Vista 및 이전 운영 체제 버전은 이러한 항목에 주의를 기울이지 않습니다. Windows 7부터 Windows는 실행 중인 Windows 버전까지 매니페스트에서 가장 높은 버전 GUID를 선택하고 해당 수준에서 앱 지원을 제공합니다. 앱이 새 앱 매니페스트 호환성 섹션과 작동하는지 확인하려면 다음을 수행합니다.
- 새 호환성 섹션 및 SupportedOS ID = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}으로 앱을 테스트하여 최신 Windows 8 동작을 사용하여 앱이 제대로 작동하는지 확인합니다.
- 새 호환성 섹션 및 SupportedOS ID = {35138b9a-5d96-4fbd-8e2d-a2440225f93a}로 앱을 테스트하여 Windows 7 동작을 사용하여 앱이 제대로 작동하는지 확인합니다.
- 새 호환성 섹션 및 SupportedOS ID = {e2011457-1546-43c5-a5fe-008deee3d3f0}으로 앱을 테스트하여 Windows Vista 동작을 사용하여 앱이 제대로 작동하는지 확인합니다.