How To: インストール中に ファイルの バージョンナンバーをチェックする

インストーラーは、インストール プロセス中に、ディスク上のファイルのバージョンを 調べる事が よく必要となります。このチェックは、のちのインストールの条件文の前に よく使われます。ファイルが存在しない時に インストールをブロックしたり、ファイル バージョンが十分大きいかどうかによって カスタム インストール UI を表示したり。 この how to は、ディスク上のファイルのバージョンを確認し、結果のプロパティを、 もし ファイル バージョンが期待したより低いなら アプリケーション インストールを ブロックするのに使って、デモンストレーションしています。

Step 1: ファイルのバージョンを 決定する

ファイル バージョンは、 <Property> <DirectorySearch> <FileSearch> エレメントを使って決定されています。以下のスニペットは、マシンの System32 ディレクトリーで user32.dll ファイルを探し、少なくともバージョン 6.0.6001.1751 であるかを見る為に チェックしています。

<Property Id="USER32VERSION">
    <DirectorySearch Id="SystemFolderDriverVersion" Path="[SystemFolder]">
        <FileSearch Name="user32.dll" MinVersion="6.0.6001.1750"/>
    </DirectorySearch>
</Property>

ファイルのサーチは、サーチするディレクトリーを記述する事と そのディレクトリーで 探すファイルを指定する事によって、達成されています。

Property エレメントは、ファイル サーチの結果の為の Id を定義しています。この Id はのちに WiX プロジェクトで、 例えば condition で、使われています。DirectorySearch エレメントは、ファイルをサーチするディレクトリー階層をビルドするのに使われています。 この場合、ユニーク Id が与えられ、パスは、ユーザーの Windows\System32 ディレクトリーを指す Windows Installer で定義されている SystemFolder プロパティにセットされています。FileSearch エレメントは、 親の DirectorySearch フォルダーで探すファイルの名前を 指定しています。 MinVersion アトリビュートは、見つけるファイルの最小バージョンを 指定しています。

もし ファイルの検索に成功すると、USER32VERSION プロパティは user32.dll ファイルへの フルパスが セットされます。

重要: ファイルをロケール ニュートラルでサーチする時、 MinVersion プロパティに、実際に探したいバージョンより 小さなリビジョン番号を ひとつ セットしなければなりません。この例では、ファイル バージョン 6.0.6001.1751 を見つけたいけれど MinVersion は 6.0.6001.1750 にセットされています。 これは、どのように Windows Installer がファイル バージョンをマッチさせるかの 癖のせいです。 より多くの informationが、Windows Installer ドキュメンテーションで利用可能です。

Step 2: condition で プロパティを使用する

いったん ファイルが要求したバージョンで存在するかどうか 決定すれば、condition で プロパティを使う事ができます。以下は、もし user32.dll のファイル バージョンが 低すぎると アプリケーションのインストールを避ける シンプルな例です。

<Condition Message="The installed version of user32.dll is not high enough to support this installer.">
    <![CDATA[Installed OR USER32VERSION]]>
</Condition>

Installed は、チェックが、アプリケーションの 修復や削除ではなく インストールしている時 にだけ なされることを保証する Windows Installer プロパティです。 USER32VERSION 部分は、もし プロパティが何かセットされていれば 通過し、セットされて いなければ 失敗します。Step 1 でのファイル チェックは、user32.dll ファイルが 適切な ファイル バージョンで見つかれば プロパティにフルパスを設定し、そうでなければ 設定しません。

 

( 訳注: 条件文でのプロパティの使用 ( 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 ) で確認して下さい。 )