How To: インストール中に レジストリー エントリーを読む

インストーラーは、インストールプロセス中に レジストリー エントリーの値を調べる必要が よくあります。 結果のレジストリー値は、インストールの後のほうでの条件文で たいてい使われています。 もし レジストリー エントリーが見つからなければ 特定のコンポーネントをインストールするといったものです。 この how to は、 LaunchCondition で、レジストリーから整数値を読み その存在を検証する事を デモンストレーションして います。

Step 1: レジストリー エントリーを property に読み込む

レジストリー エントリーは、 <RegistrySearch> エレメントを使って 読まれています。以下のスニペットは、 ターゲット マシン上での .NET Framework 2.0 のインストールを識別する キー* の存在を 調べます。

* このレジストリー エントリーは、サンプル目的だけで 使用されています。もし インストールされた .NET Framework のバージョンを見つけたければ、ビルトイン WiX サポートを使うことができます。 より多くの情報に関しては、 How To: .NET Framework のバージョンを チェックする を見て下さい。

<Property Id="NETFRAMEWORK20">
    <RegistrySearch Id="NetFramework20"
		    Root="HKLM"
		    Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727"
		    Name="Install"
		    Type="raw" />
</Property>

RegistrySearch エレメントは、ユニーク id 、サーチする レジストリーのルート、その下で捜すキーを指定します。 Name アトリビュートは、尋ねる特定の値を指定します。Type アトリビュートは、値がどのように扱われるかを 指定します。raw は、値は 値のデータ型に基づいて プリフィックスが付けられるべきであると 示しています。 このケースでは、Install が DWORD であるので、結果の値は # が付けられます。

上のサンプルは、もし レジストリー キーが見つかれば NETFRAMEWORK20 property に "#1" がセットされ、 そうでなければ 何もセットされません。

Step 2: condition で property を使用する

property がセットされた後、WiX プロジェクトで condition 内のどこででも 使う事ができます。 以下のスニペットは、もし .NET Framework 2.0 がインストールされていなければ インストールをブロックする為に どのように使うかを デモンストレーションしています。

<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR NETFRAMEWORK20]]>
</Condition>

Installed は、チェックが アプリケーションの修復や削除ではなくて インストールの時にだけ 行われる事を 保証する Windows Installer プロパティです。condition の NETFRAMEWORK20 の部分は、もし プロパティが セットされていれば パスします。もし セットされていなければ、インストーラーはエラー メッセージを表示して、 インストール プロセスを中止します。

 

( 訳注: 条件文でのプロパティの使用 ( Using Properties in Conditional Statements ) にある様に、Condition には9種類あります。これを WiX が書かれた場所に応じて 適切に振り分けます。 その中で、 LaunchCondition Table という所に行く Condition だけが 逆の記述に見えます。 LaunchCondition tableColumns@Condition に書いてある様に 「インストールが始まるためには True に評価されなければならない式」となっている所為です ( Expression that must evaluate to True for installation to begin. )。 注意して下さい。)

( 訳注: Windows Installer によってあらかじめ定義されている Property は プロパティ リファレンス ( Property Reference ) から探して下さい。演算子は、 条件文シンタックス ( Conditional Statement Syntax ) で確認して下さい。 )