Image: Windowsオペレーティングシステムのコンテキスト[Compatibility@app.manifest]

Windowsタスクマネージャーの「オペレーティングシステムのコンテキスト」およびアプリケーションマニフェストのcompatibilityセクションについて。

タスクマネージャーの「詳細」タブにあるプロセスの一覧に「オペレーティングシステムのコンテキスト」という項目があって、Windows 8.1だと「Windows Vista」「Windows 7」「Windows 8」「Windows 8.1」のいずれかになっているのだけど、これがどういう意味で何を元に判別しているのか、気になったので調べてみた。

App (executable) manifest - MSDN Windows Dev Center Desktop

どうもこれはWindows 7で追加された互換性のための機能で、Windows Vista以前で動作するように設計されたアプリケーションはWindows Vistaの仕様で動作し、Windows 7で動作するように設計されたアプリケーションはWindows 7の仕様で動作するというもの。具体的には、アプリケーションマニフェストのcompatibilityセクションで、OSバージョン毎に固有のsupportedOS Idを追加することで新しいOSの仕様で動くようになる。アプリケーションマニフェストにcompatibilityセクションを記述していない場合は、Windows Vistaの仕様で動作する。今のところそれぞれの仕様の違いはそれほど大きなものではないようだが、将来のWindowsではさらに仕様変更が増えるかもしれない。

私は今までVS2008でWindowsアプリケーションの開発を行っていたので、アプリケーションマニフェストはrequestedExecutionLevelを記述するものという認識しかなかった。VS2010以降ではアプリケーションマニフェストファイル作成時のテンプレートでcompatibiltyセクションが追加されるようだ。

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  <application>
    <!--このアプリケーションが動作するように設計されている、Windows のすべてのバージョンの一覧。
    Windows は最も互換性の高い環境を自動的に選択します。-->

    <!--アプリケーションが Windows Vista で動作するように設計されている場合は、次の supportedOS ノードのコメントを解除します-->
    <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>-->

    <!-- アプリケーションが Windows 7 で動作するように設計されている場合は、次の supportedOS ノードのコメントを解除します。-->
    <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->

    <!--アプリケーションが Windows 8 で動作するように設計されている場合は、次の supportedOS ノードのコメントを解除します-->
    <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>-->

    <!-- Windows 8.1 RTM -->
    <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>-->

  </application>
</compatibility>

[EOF]


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!