Windows 10 および Windows Server 2016 における Windows インストーラー パッケージの VersionNT プロパティについて
こんにちは。Visual Studio サポート チームです。
今回は、開発したアプリケーションを配布する場合などに、Windows インストーラー パッケージ (MSI) から OS のバージョンをチェックする際にご注意いただきたい点についてご案内します。
ご注意いただきたい点
Windows インストーラー パッケージでは、VersionNT プロパティを使用した条件 (Condition) を定義することで、インストール対象の OS を制御することが可能でした。しかし、以下のドキュメントに記載の通り、Windows 10 および Windows Server 2016 に対応する VersionNT の値は Windows 8.1 と同じ 603 となっています。
VersionNT value for Windows 10 and Windows Server 2016
https://support.microsoft.com/en-us/kb/3202260
このため、VersionNT を使用する方法では、Windows 8.1、Windows 10 、および Windows Server 2012 R2、Windows Server 2016 を識別することはできませんので、ご注意ください。
マイクロソフトでは Windows 8.1 上で動作するアプリケーションが Windows 10 上でも問題なく動作するよう互換性を考慮してオペレーティング システムを開発しています。Windows インストーラー パッケージ及びその他アプリケーションにおいては、OS のバージョンをチェックして動作を変更するような設計はできる限り控えていただくよう推奨しています。
なお、Windows 10は今後も継続してアップグレードが提供されますが、Windows 10 の各バージョン (November update (TH2), Anniversary Update (RS) など) を確認してインストールを制御するような設計についても同様に推奨しておりません。このため、お客様が開発されたアプリケーションにおいて、未検証の新しいバージョンの OS に対してインストールを抑制するといったシナリオもサポートされませんのでご注意ください。
また、前述のとおり、Windows 10 ではバージョン間で互換性が維持されるよう開発が行われていますが、お客様のアプリケーションの要件上、どうしても新しいバージョンの OS 上での利用を制限する必要がある場合には、開発された製品のドキュメント等を通して、ユーザーにアプリケーションのシステム要件を案内するなどしてご対応ください。
もし、特定のバージョンの OS で提供されている機能に依存してアプリケーションの動作に問題が生じ、同環境でのアプリケーションの利用を制限したいような場合には、同機能を提供しているモジュールの有無やバージョンを確認し、それらの情報をもとにアプリケーションのインストールや動作を制御するような対応をご検討ください。
代替手段
上記のとおり、インストーラー パッケージから対象の OS のバージョンをチェックすることは推奨されませんが、何らかの理由により OS のバージョンを確認する必要がある場合は、以下のレジストリ キーの値を確認する方法を利用することができます。
レジストリ キー: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
名前: CurrentMajorVersionNumber
なお、Visual Studio のセットアップ プロジェクトからは上記レジストリをチェックするような設定は行えないため、Orca エディタを使用して MSI ファイルを直接編集する必要があります。
以下に、Orca エディタを使用した設定方法をご案内します。
手順 1 : Orca エディタのインストール
Orca エディタをインストールされていない場合は、Visual Studio や Windows SDK に付属の Orca.msi から Orca エディタをインストールしてください。
以下では Windows SDK からインストールする手順をご案内します。
1. Windows SDK がインストールされていない環境の場合は、以下の URL から Windows SDK をダウンロードします。
Windows 8.1 用 Windows ソフトウェア開発キット (Windows SDK)
https://developer.microsoft.com/ja-jp/windows/downloads/windows-8-1-sdk
※ 他のバージョンの Windows SDK でもかまいません。
2. Windows SDK のインストーラーを実行し、インストール対象の機能として MSI Tools を選択します。
3. 画面の指示に従ってインストールを完了させてください。
4. Windows SDK のインストールが完了したら、以下のパスなどにある Orca.msi をダブル クリックして Orca エディタをインストールします。
パス
C:\Program Files (x86)\Windows Kits\8.1\bin\x86
手順 2 : MSI テーブルの編集
1. 対象の MSI ファイルを右クリックして [Edit with Orca] を選択し、Orca エディタで開きます。
2. 画面左側のテーブル一覧より、"AppSearch" テーブルを開き、以下の設定で行を追加します。
※ 以下の値は設定例であり任意の値に変更してもかまいません。
※ 変更した場合は、以降の設定においてその値を指定してください。
Property : MYOSVER
Signature_ : CheckOSMajorVer
3. 画面左側のテーブル一覧より、"RegLocator" テーブルを開き、以下の設定で行を追加します。
Signature : CheckOSMajorVer (手順 2. の "Signature_" で設定した値)
Root : 2
Key : SOFTWARE\Microsoft\Windows NT\CurrentVersion
Name : CurrentMajorVersionNumber
Type : 18
4. 画面左側のテーブル一覧より、"Property" テーブルを開き以下の設定で行を追加します。
Property : MYOSVER (上記手順 5. の "Property" で設定した値)
Value : 0
上記設定を行うことで、MSI 内部で MYOSVER プロパティを使用することが可能となります。
例えば、対象の OS が Windows 10 の場合のみファイルをインストールしたい場合には、 "Component" テーブルで Condition を以下のように設定ください。
MYOSVER="#10"
※ 取得されるレジストリ値が DWORD 型となるため、上記のように # を含める必要があります。
5. Component や CustomAction など OS のバージョンに応じた処理を行う必要があるものについて設定し、MSI を保存してください。
参考文書
レジストリの値をプロパティとして設定する方法については、以下のサポート技術情報に記載がありますので合わせてご参考ください。
Windows のインストール パッケージに AppSearch を使用する方法
(英語原文) https://support.microsoft.com/en-us/kb/827019
(機械翻訳) https://support.microsoft.com/ja-jp/kb/827019
AppSearch Table
https://msdn.microsoft.com/en-us/library/windows/desktop/aa367579(v=vs.85).aspx
AppSearch Action
https://msdn.microsoft.com/en-us/library/windows/desktop/aa367578(v=vs.85).aspx
以上となります。
OS のバージョンの識別に VersionNT を使用していた開発者様にはご不便をおかけしますが、上記内容についてご承知おきくださいますようお願い申し上げます。