コンポーネントが既にインストールされているかどうかチェックしたり、条件付きで有効にしたり、
ユーザー定義コントロールを表示するのに 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 を返します。
プロダクトのどのバージョンもインストールされていない時に パッチがインストールされない筈なので、これが
既存のバージョンへのパッチ適用に都合が良い事があります。この場合には、defaultValue を
true にセットします。
check_product
与えられたプロダクトについて プロダクトIDかアップグレードコードによって
MSI データベースを問い合わせます。以下のプロパティが、チェック中で利用可能です。
- description
- ログ中に現れる、チェックの自由形式の説明。
- id
-
プロダクトコードかアップグレードコード。
プロダクトコードが プロダクトの特定のバージョンを識別する一方、アップグレードコードは決して変わらず
複数のプロダクトバージョンを一緒に結び付けます。
複数のプロダクトを アップグレードコードを通して 関連付ける事が可能である事に 注意して下さい。
詳細に関しては MSDN
ProductCode
と
UpgradeCode
を 見て下さい。
- 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 オペレーターを追加します。
|