Windows 11 の判定に関する記事です。
対象製品:InstallShield 2021 以降
対象プロジェクト:基本の MSI, InstallScript MSI, InstallScript
[概要]
Windows 11 にの環境を識別するための情報は、Microsoft 社から正式な情報は公開されておりません。
InstallShield ではレジストリ情報を取得して、それを条件判定に利用することが可能です。
例えば、現時点(2021/11/05)では Windows 11 は BuildNumber が22000以降となっているため、
BuildNumber を取得してOS判定を組み込むことは可能です。
※OSの仕様は変更される場合がありますので、判定条件に利用する値はお客様にて最新情報をご確認ください。
------------------------------------------------------------------
キー名:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
値名:
CurrentBuild
データ:
OSのビルド番号
------------------------------------------------------------------
レジストリの値からビルド番号を取得するサンプルスクリプトです。
■ InstallScript/InstallScriptMSI プロジェクト
1.[動作とロジック]-[InstallScript]ビューを表示します。
2. 上部のイベントカテゴリ(左のリストボックス)で[Before Move Data]を選択して、 イベント(右のリストボックス)
で[OnBegin]イベントを選択します。
OnBegin イベントが setup.rul ファイルに追加されます。
3. 下記のスクリプトを追加します
<InstallShield 2021 R1の場合>
=========================================================================
#include"ifx.h"
function OnBegin()
STRING svBuildnum;
NUMBER nvType, nzSize;
begin
if (!MAINTENANCE) then
nzSize = 256;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBGetKeyValueEx("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "CurrentBuild", nvType, svBuildnum, nzSize);
if (svBuildnum >= "22000") then
MessageBox ("OSは、Windows11 です",INFORMATION);
//インストールを中断したい場合は、下の行のabort前のコメント(//)を外します
//abort;
endif;
endif;
end;
=========================================================================
<InstallShield 2021 R2の場合>
InstallShield 2021 R2 で、Windows 11を判定するSYSYINFOメンバー(SYSINFO.WINNT.bWin11)が追加にされ、
以下のメンバーを利用して判定が可能です。
=========================================================================
#include"ifx.h"
function OnBegin( )
begin
if (!MAINTENANCE) then
if (SYSINFO.WINNT.bWin11 =TRUE) then
MessageBox("OSは、Windows11 です。",INFORMATION);
//インストールを中断したい場合は、下の行のabort前のコメント(//)を外します
//abort;
endif;
endif;
end;
=========================================================================
■ 基本の MSI プロジェクト
1.[動作とロジック]-[InstallScript]ビューで、[ファイル]アイコンを右クリックして、
[スクリプトファイルの新規作成]を選択します。
追加された Setup.rul ファイルで、以下のスクリプトを追加します。
=========================================================================
export prototype CheckOS(HWND);
function CheckOS(hMSI)
STRING svBuildnum;
NUMBER nvType, nzSize;
begin
nzSize = 256;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBGetKeyValueEx("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "CurrentBuild", nvType, svBuildnum, nzSize);
if (svBuildnum >= "22000") then
MessageBox ("OSは、Windows11 です",INFORMATION);
//インストールを中断したい場合は、下の行のabort前のコメント(//)を外します
//abort;
endif;
end;
=========================================================================
2.[動作とロジック]-[カスタム アクションとシーケンス]ビューで、[カスタムアクション]
アイコンを右クリックし、[新しい InstallScript]を選択します。
カスタムアクション名は「caCheckOS」(任意の名前)
作成されたカスタムアクションで、以下の設定を行います。
関数名: CheckOS ※手順1 で作成したユーザー定義関数名
インストールUIシーケンス: LaunchConditions の後
インストールUI条件: not Installed