InstallShield

03192 : MSI で Windows 10 を判定する方法

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 の判定、バージョンの判定、インストール条件


2015/09/07 11:44:05
2019/05/22 14:11:56