アプリ (実行可能ファイル) マニフェスト
プラットフォーム
クライアント – 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 ビット ブロック転送 (bitblt) からプライマリへのクリッピング ウィンドウなし
- Windows 8と Windows 7: Windows 7 以降のバージョンの Windows 用にマニフェストされたアプリは、クリッピング ウィンドウなしでプライマリ デスクトップ ビデオ バッファーにビットレットを実行できません。これにより、エラーが発生し、ビットレット領域はレンダリングされません。 Windows では、デスクトップ ウィンドウ マネージャーコンポジションを有効にしない場合でも、この動作が適用されます。 Windows 7 以降で宣言された互換性を持つアプリは、クリッピング ウィンドウにビットブレットを実行する必要があります。
- Windows Vista (既定): レガシ アプリはこの動作に依存するため、クリッピング ウィンドウなしでプライマリに対してビットレットを実行できる必要があります。このアプリを実行すると、デスクトップ ウィンドウ マネージャーがオフになります。
GetOverlappedResult API
- Windows 8と Windows 7: GetOverlappedResult を使用するマルチスレッド アプリが重複する構造体のイベントをリセットせずに返すことができる競合状態を解決し、この関数の次の呼び出しが途中で返されます。
- Windows Vista (既定値): アプリが依存関係を持つ可能性がある競合状態の動作を提供します。 Windows 7 の動作の前にこの競合を回避する必要があるアプリは、重複したイベントを待機し、シグナルが送信されたら、bWait == FALSE で GetOverlappedResult を呼び出す必要があります。
ハイ コントラスト モードでのシェル テーマの状態
- Windows 8: ハイ コントラスト モードの場合の実際のテーマの状態を返します。
- Windows 7: DWM がまだオンになっているため、ハイ コントラスト モードの場合はテーマを使用不可として返します。
- Windows Vista (既定値): DWM がまだオンになっているため、ハイ コントラスト モードの場合はテーマを使用不可として返します。
シェル iPersistFile::Save メソッド
Windows 8: CShellLink::Save は、IPersistFile ハンドラーが相対パス引数を使用して呼び出されるかどうかを判断し、呼び出しが失敗した場合は失敗します。
この動作を説明する パブリック ドキュメント は、path 引数が絶対パスである必要があることを示しています。
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 は、下位レベルのサポートを提供します。 複数のプラットフォームをサポートするアプリでは、プラットフォームごとに個別のマニフェストは必要ありません。
テスト
1 つのアプリで、サポートされている複数のオペレーティング システム 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 の動作を使用してアプリが正しく動作することを確認します。
リソース
- QueryActCtxW 関数
- UAC マニフェスト
- Windows アプリケーションのアプリケーション マニフェスト
- デスクトップ ウィンドウ マネージャー (DWM)
- コンテキストの不一致の更新
- プログラム互換性アシスタント