Windows Installer (MSI) での Windows 10 の判定に関する記事です。
対象製品:InstallShield 2015
対象プロジェクト:基本の MSI, InstallScript MSI
[概要]
Windows Installer では、これまで OS ごとに VersionNT や VersionNT64 の値が異なっていたため、
これらのプロパティを使用して OS の判定を行うことができました。
例) Windows 7/Window Server 2008R2 ・・・VersionNT=601
Windows 8/Window Server 2012 ・・・VersionNT=602,
Windows 8.1/Window Server 2012R2・・・VersionNT=603
ところが、Windows 10/Window Server 2016 環境では Windows Installer が従来バージョンの判定に
使用していたこれらのプロパティは Windows 8.1/Window Server 2012R2 環境と同じ 603 という値を
返却します。
そのため、VersionNT や VersionNT64 プロパティでは、Windows 10/Window Server 2016 を識別する
ことができなくなっています。
Windows Installer エンジンが Windows 10 環境を識別するためのプロパティや仕組みについては、
Microsoft 社から正式に情報は公開されておりません。
InstallShield ではシステム検索の機能を利用することで、レジストリ値を取得して条件判定などに
利用できます。
例えば、Windows 10 環境では以下のレジストリキーで OS バージョンやインストールタイプが判別
できるため、システム検索によりこのレジストリ値を取得して、Windows 10 の判定に使用することは
できます。
------------------------------------------------------------------
キー名:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
値名:
CurrentMajorVersionNumber
データ:OSのメジャーバージョン(DWORD)
------------------------------------------------------------------
キー名:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
値名:
InstallationType
データ:クライアントOSでは「Client」、サーバーOSでは「Server」
Server Core では「Server Core」など
------------------------------------------------------------------
※レジストリ情報の詳細につきましては、Microsoft 社へご確認ください。
[手順]
システム検索の機能を利用して、レジストリの値を取得する方法は、以下のとおりです。
1. [動作とロジック]-[システム検索] ビューに移動します
2. 右側のペインを右クリックして、[追加] を選択します
3. システム検索ウィザードが起動するので、以下の設定を行います
・[検索する対象を指定してください]パネル
--------------------------------------------------
[次のリストの中から検索する項目を選択します。]
┗「レジストリ エントリ」
--------------------------------------------------
・[検索方法を指定してください]パネル
------------------------------------------------------------------
レジストリルート: HKEY_LOCAL_MACHINE
レジストリキー : SOFTWARE\Microsoft\Windows NT\CurrentVersion
レジストリ値 : CurrentMajorVersionNumber
------------------------------------------------------------------
・[この値の処理方法を指定してください]パネル
----------------------------------------
[値を保存するプロパティ]
┗「OS_MAJORVER」
[追加オプション]
┗「プロパティに値を保存する」
-----------------------------------------
4. 再度、[システム検索] ビューで、[追加] を選択します
5. システム検索ウィザードが起動したら、以下の設定を行います
・[検索する対象を指定してください]パネル
--------------------------------------------------
[次のリストの中から検索する項目を選択します。]
┗「レジストリ エントリ」
--------------------------------------------------
・[検索方法を指定してください]パネル
------------------------------------------------------------------
レジストリルート: HKEY_LOCAL_MACHINE
レジストリキー : SOFTWARE\Microsoft\Windows NT\CurrentVersion
レジストリ値 : InstallationType
------------------------------------------------------------------
・[この値の処理方法を指定してください]パネル
-----------------------------------------------------------------------
[値を保存するプロパティ]
┗「OS_TYPE」
[追加オプション]
┗「プロパティに値を保存し、インストール条件でこのプロパティを使用」
-----------------------------------------------------------------------
6. 完了ボタンを押下すると条件ビルダーが起動するので以下の設定を行います
----------------------------------------------------------------------------
例)Windows 10 環境のみにインストールを行う場合
条件:
(OS_MAJORVER="#10") And (OS_TYPE="Client")
メッセージ:
このアプリケーションは、Windows 10 以外の環境にはインストールできません。
----------------------------------------------------------------------------
----------------------------------------------------------------------------------
例)Window Server 2016 環境のみにインストールを行う場合
条件:
(OS_MAJORVER="#10") And (NOT OS_TYPE="Client")
メッセージ:
このアプリケーションは、Window Server 2016 以外の環境にはインストールできません。
----------------------------------------------------------------------------------
※条件が False のときメッセージを表示して、インストールが中断します。
[備考]
なお、本記事の内容は以下の記事を参考に作成しています。こちらの記事では、スイートプロジェクトを
使用する方法についても紹介しています。
Identifying Windows 10 with MSI
検索文字列:Windows 10、Window Server 2016、OS の判定、バージョンの判定、インストール条件