アプリ (実行可能ファイル) マニフェスト

プラットフォーム

クライアント – Windows 8 サーバー – Windows Server 2012

説明

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 は、下位レベルのサポートを提供します。 複数のプラットフォームをサポートするアプリでは、プラットフォームごとに個別のマニフェストは必要ありません。

テスト

アプリでは、サポートされている複数のオペレーティング システム ID を指定できます。 サポートされているオペレーティング システム ID は、そのオペレーティング システムでアプリをテストしている場合、またはテスト中の場合に追加する必要があります。 Windows Vista および以前のオペレーティング システムのバージョンでは、これらのエントリに注意を払いません。 Windows 7 以降、Windows は実行中の Windows バージョンまでのマニフェストで最高バージョンの GUID を選択し、そのレベルでアプリのサポートを提供します。 アプリが新しいアプリ マニフェスト互換性セクションで動作することを確認するには、次の手順を実行します。

  1. 新しい互換性セクションと SupportedOS ID = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} を使用してアプリをテストし、最新のWindows 8動作を使用してアプリが適切に動作することを確認します。
  2. 新しい互換性セクションと SupportedOS ID = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} でアプリをテストし、Windows 7 の動作を使用してアプリが適切に動作することを確認します。
  3. 新しい互換性セクションと SupportedOS ID = {e2011457-1546-43c5-a5fe-008deee3d3f0} でアプリをテストし、Windows Vista の動作を使用してアプリが正しく動作することを確認します。

リソース