dotNetInstaller Users Guide
インストール済みチェック & オペレーター

コンポーネントが既にインストールされているかどうかチェックしたり、条件付きで有効にしたり、 ユーザー定義コントロールを表示するのに InstalledCheck コンフィギュレーション要素を使う事ができます。 例えば、SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install レジストリキーを読む事によって .NET Framework 1.1 がインストールされているかチェックできます。 InstalledCheck は、対象 OS によってコンポーネントを選択する オペレーティングシステム フィルター や、 オペレーティングシステムやハードウェアアーキテクチャーをチェックする プロセッサー アーキテクチャー フィルター と 組み合わせる事ができます。


InstalledCheck(インストール済みチェック)タイプ

4つのタイプの InstalledCheck があります。 check_file, check_directory, check_registry_value, check_product です。これらは、インストール済みチェック オペレーターの下に追加する事もできます。

check_file

特定のファイルを 具体的なバージョンで チェックします。

以下の比較タイプが利用可能です。

match
ファイルのバージョンが チェック値とちょうど一致する事を チェックします。
exists
ファイルが存在するかどうか チェックします。
version
ファイルのバージョンが チェック値と等しいあるいはより大きいかどうか チェックします。
version_eq
ファイルのバージョンが チェック値と等しいかどうか チェックします。
version_lt
ファイルのバージョンが チェック値より小さいかどうか チェックします。
version_le
ファイルのバージョンが チェック値以下かどうか チェックします。
version_gt
ファイルのバージョンが チェック値より大きいかどうか チェックします。
version_ge
ファイルのバージョンが チェック値以上かどうか チェックします。

比較定義ごとにこのチェックがコンポーネントがインストールされているかどうかを決定する事ができない事も、あり得ます。 これは、ファイルが存在しなくて 比較タイプが version である例が、当てはまります。 この場合には、チェックは defaultvalue を返します。

check_directory

特定のディレクトリが存在するかどうか チェックします。

check_registry_value

特定のレジストリ キーや値をチェックします。

注:

DWORD, REG_SZ, REG_MULTI_SZ レジストリ タイプだけが 現在サポートされています。

以下の比較タイプが利用可能です。

match
レジストリ キーの値が チェック値とちょうど一致する事を チェックします。 REG_MULTI_SZ レジストリ値については、カンマで区切った値を指定します。 レジストリ値は、指定されたリストにちょうど一致しなければなりません。
exists
レジストリ キーあるいは値が 存在するかどうかを チェックします。 もし fieldname が空なら、レジストリ キーが 存在するかどうかを チェックします。 さもなければ 値が存在するかどうかを チェックします。 デフォルト レジストリ キー値が セットされているかどうかを チェックするには、 value_exists を使います。
key_exists
レジストリ キーが 存在するかどうかを チェックします。 fieldname の値は、無視されます。
value_exists
レジストリ値が 存在するかどうかを チェックします。 もし fieldname が空なら、キーのデフォルト値が セットされているかどうかを チェックします。
contains
レジストリ値がチェック値を含むかどうか チェックします。 REG_MULTI_SZ レジストリ値については、カンマで区切ったリストを指定します。 レジストリ値は、指定されたすべての値を 含まなければなりません。
version
レジストリ値が ファイルバージョンとして解釈されます。 バージョンが チェック値と等しいあるいはより大きいかどうか チェックします。 このオプションは、REG_MULTI_SZ 値に関しては 利用できません。
version_eq
レジストリ値が ファイルバージョンとして解釈されます。 レジストリ中のバージョンが チェック値と等しいかどうか チェックします。
version_lt
レジストリ値が ファイルバージョンとして解釈されます。 レジストリ中のバージョンが チェック値より小さいかどうか チェックします。
version_le
レジストリ値が ファイルバージョンとして解釈されます。 レジストリ中のバージョンが チェック値以下かどうか チェックします。
version_gt
レジストリ値が ファイルバージョンとして解釈されます。 レジストリ中のバージョンが チェック値より大きいかどうか チェックします。
version_ge
レジストリ値が ファイルバージョンとして解釈されます。 レジストリ中のバージョンが チェック値以上かどうか チェックします。

比較定義ごとにこのチェックがコンポーネントがインストールされているかどうかを決定する事ができない事も、あり得ます。 これは、レジストリ キーが存在しなくて 比較タイプが version である例が、当てはまります。 この場合には、チェックは defaultvalue を返します。 プロダクトのどのバージョンもインストールされていない時に パッチがインストールされない筈なので、これが 既存のバージョンへのパッチ適用に都合が良い事があります。この場合には、defaultValuetrue にセットします。

check_product

与えられたプロダクトについて プロダクトIDかアップグレードコードによって MSI データベースを問い合わせます。以下のプロパティが、チェック中で利用可能です。

description
ログ中に現れる、チェックの自由形式の説明。
id
プロダクトコードかアップグレードコード。 プロダクトコードが プロダクトの特定のバージョンを識別する一方、アップグレードコードは決して変わらず 複数のプロダクトバージョンを一緒に結び付けます。 複数のプロダクトを アップグレードコードを通して 関連付ける事が可能である事に 注意して下さい。 詳細に関しては MSDN ProductCodeUpgradeCode を 見て下さい。
propertyname
いったんプロダクトやアップグレードコードによって配置されてしまったインストール済みプロダクトから 比較のために取得と使用する プロパティの名前。
propertyvalue
比較値。

以下の比較タイプが 為され得ます。

exists
その ProductCode か UpgradeCode によって識別されるプロダクトが 存在するかどうかを チェックします。
match
propertyvalue が インストール済みプロダクトから取得されたプロパティ値と ちょうど一致するかどうか チェックします。もし複数のプロダクトが見つかると、すべてとマッチさせます。
version
インストール済みプロダクトのバージョンが チェック値と等しいあるいはより大きいかどうかを チェックします。
version_eq
インストール済みプロダクトのバージョンが チェック値と等しいかどうかを チェックします。
version_lt
インストール済みプロダクトのバージョンが チェック値より小さいかどうかを チェックします。
version_le
インストール済みプロダクトのバージョンが チェック値以下かどうかを チェックします。
version_gt
インストール済みプロダクトのバージョンが チェック値より大きいかどうかを チェックします。
version_ge
インストール済みプロダクトのバージョンが チェック値以上かどうかを チェックします。

比較定義ごとにこのチェックがコンポーネントがインストールされているかどうかを決定する事ができない事も、あり得ます。 これは、プロダクトがインストールされていなくて 比較タイプが version である例が、当てはまります。 この場合には、チェックは defaultvalue を返します。


チェック オペレーター

InstalledCheckOperator の下に 1つ以上の InstalledCheck 要素を追加する事によって、 多数の要素からの結果を組み合わせる事ができます。 より複雑なロジックを達成するのに 他のオペレーターの下にオペレーターを追加しても構いません。 以下のオペレーターがサポートされています。And, Or, Not です。

重要な注意:

チェックはコンポーネントがインストールされているかどうかをテストし、コンポーネントがインストールされていない場合にだけ それがセットアップ時にブートストラッパー中に現れる事を 覚えて置いて下さい。 コンポーネント オペレーターを組み合わせている時には、この行動がいくらか精神的な体操を必要とするかもしれません。

ユーザー定義コントロールは逆です。インストール済みチェックが True になる場合に、コントロールが有効や可視になります。

重要な注意:

デフォルトでは、Not オペレーターは Not Or として振る舞います。 多数のインストール済みチェックがこのオペレーターの下に追加された時、いずれかのチェックが True を返すと Not オペレーターは False を返します。 Not And 動作を達成するには、Not オペレーターの下に And オペレーターを追加します。