次の方法で共有


条件付きステートメントの構文

このセクションでは、MsiEvaluateCondition 関数で使用される条件付きステートメントの構文と、シーケンス テーブル アクションについて説明します。 詳細については、「条件ステートメント構文の例」を参照してください。

条件付きステートメント構文の概要

次の表と一覧は、条件式で使用する構文をまとめたものです。

アイテム 構文
価値 symbol |literal |整数
comparison-operator < |> |<= |>= |= |<>
用語 value |value comparison-operator value |( 式 )|
Boolean-factor term |用語 しない
Boolean-term ブール係数 |ブール係数 AND 用語
表現 Boolean-term |Boolean-term OR
記号 property |%environment-variable |$component-action | ?component-state |&feature-action | !feature-state

 

  • シンボルの名前と値では大文字と小文字が区別されます。

  • 環境変数の名前では、大文字と小文字は区別されません。

  • リテラル テキストは引用符 ("text") で囲む必要があります。

    手記

    引用符を含むリテラル テキストは、リテラル テキスト内に引用符のエスケープ文字がないため、条件付きステートメントでは使用できません。 引用符を含むリテラル テキストと比較するには、リテラル テキストをプロパティに配置する必要があります。 たとえば、SERVERNAME プロパティに引用符が含まれていないことを確認するには、値が " の Property テーブル QUOTES というプロパティを定義し、条件を NOT SERVERNAME><QUOTES に変更します。

     

  • 存在しないプロパティ値は、空の文字列として扱われます。

  • 浮動小数点数値はサポートされていません。

  • 演算子と優先順位は、BASIC および SQL 言語の場合と同じです。

  • 算術演算子はサポートされていません。

  • かっこを使用すると、演算子の優先順位をオーバーライドできます。

  • 演算子では大文字と小文字は区別されません。

  • 文字列比較の場合、演算子の先頭にチルダ "~" を付けて、大文字と小文字を区別しない比較を実行します。

  • 整数に変換できない文字列またはプロパティ値を持つ整数の比較は、msiEvaluateConditionFalse 常に行われます。ただし、msiEvaluateConditionTrue 返す比較演算子 "<>" を除きます。

アクセス プレフィックス

次の表に、条件式で使用するさまざまなシステム情報とインストーラー情報にアクセスするために使用するプレフィックスを示します。

シンボルの種類 接頭辞 価値
Installer プロパティ (なし) property (Property) テーブルの値。
環境変数 % 環境変数の値。
コンポーネント テーブル キー $ コンポーネントのアクションの状態。
コンポーネント テーブル キー ? コンポーネントのインストール済み状態。
フィーチャー テーブル キー & 機能のアクションの状態。
フィーチャー テーブル キー ! 機能のインストール済み状態。

 

論理演算子

次の表に、優先順位の高い順に条件式の論理演算子を示します。

演算子 意味
じゃない プレフィックス単項演算子。は、次の項の状態を反転します。
そして 両方の用語が TRUE の場合は TRUE。
又は どちらか一方または両方の用語が TRUE の場合は TRUE。
Xor 両方の用語が TRUE でない場合は TRUE。
Eqv 両方の用語が TRUE の場合、または両方の用語が FALSE の場合は TRUE。
邪鬼 左の用語が FALSE の場合、または右の用語が TRUE の場合は TRUE。

 

比較演算子

次の表は、条件式で使用される比較演算子を示しています。 これらの比較演算子は、2 つの値の間でのみ実行できます。

演算子 意味
= 左の値が右の値と等しい場合は TRUE。
<> 左の値が右の値と等しくない場合は TRUE。
> 左の値が右の値より大きい場合は TRUE。
>= 左の値が右の値以上の場合は TRUE。
< 左の値が右の値より小さい場合は TRUE。
<= 左の値が右の値以下の場合は TRUE。

 

部分文字列演算子

次の表は、条件式で使用される部分文字列演算子を示しています。 部分文字列演算子は、2 つの文字列値の間で行うことができます。

演算子 意味
>< 左の文字列に右の文字列が含まれている場合は TRUE。
<< 左の文字列が右の文字列で始まる場合は TRUE。
>> 左の文字列が右の文字列で終わる場合は TRUE。

 

ビットごとの数値演算子

次の表は、条件式のビットごとの数値演算子を示しています。 これらの演算子は、2 つの整数値の間で発生する可能性があります。

演算子 意味
>< ビットごとの AND。左整数と右整数に共通のビットがある場合は TRUE。
<< True の 場合は、左の整数の上位 16 ビットが右の整数と等しい。
>> True の 場合、左の整数の下位 16 ビットが右の整数と等しい。

 

機能とコンポーネントの状態の値

次の表は、フィーチャーとコンポーネント演算子のシンボルを使用する有効な場所を示しています。

演算子 <状態> この構文が有効な場所
$component-action 条件 テーブルと、CostFinalize アクションの後のテーブル シーケンス内。
&機能アクション 条件 テーブルと、CostFinalize アクションの後のテーブル シーケンス内。
!feature-state 条件 テーブルと、CostFinalize アクションの後のテーブル シーケンス内。
?component-state 条件 テーブルと、CostFinalize アクションの後のテーブル シーケンス内。

 

次の表に、条件式で使用される機能とコンポーネントの状態の値を示します。 これらの状態は、MsiSetInstallLevel が直接呼び出されるか、CostFinalize アクションによって呼び出されるまで設定されません。

状態 価値 意味
INSTALLSTATE_UNKNOWN -1 機能またはコンポーネントに対して実行するアクションはありません。
INSTALLSTATE_ADVERTISED 1 アドバタイズされた機能。 この状態は、コンポーネントでは使用できません。
INSTALLSTATE_ABSENT 2 フィーチャーまたはコンポーネントが存在しません。
INSTALLSTATE_LOCAL 3 ローカル コンピューター上の機能またはコンポーネント。
INSTALLSTATE_SOURCE 4 フィーチャーまたはコンポーネントは、ソースから実行されます。

 

たとえば、条件式 "&MyFeature=3" は、MyFeature が現在の状態からローカル コンピューターにインストールされている状態に変更されている場合にのみ True に評価INSTALLSTATE_LOCAL。

コンポーネント 1 がコンピューターにローカルにインストールされているかどうかを確認するには、$Component 1=3 の条件に依存しないでください。 これは、コンポーネント 1 が複数の製品によってインストールされている場合に失敗する可能性があります。 Product1 によって Component1 がローカルにインストールされると、インストーラーは Product2 のインストール中に条件 $Component 1=3 を False として評価します。 これは、インストーラーがコンポーネントのキー パスを使用してコンポーネントのバージョンを決定し、コンポーネントのバージョンがインストール済みコンポーネント以上の場合は、コンポーネントをインストール対象としてマークするためです。

インストーラーでは、条件付きステートメントのデータ型 バージョンの直接比較は行われません。 たとえば、比較演算子を使用して、条件ステートメントで "01.10" や "1.010" などのバージョンを比較することはできません。 代わりに、「既存のアプリケーション、ファイル、レジストリ エントリの検索、.ini ファイル エントリの」の説明に従って、有効なメソッドを使用してバージョンを検索し、プロパティを設定します。

条件付きステートメントでプロパティを使用する