MSDN > MSDN Library > Win32 and COM Development > Administration and Management > Application Installation and Servicing > Windows Installer > Windows Installer Reference > Installer Database > Using the Installer Database > Conditional Statement Syntax
このセクションは、 MsiEvaluateConditionファンクションと アクション シーケンス テーブル ( 英語 ) により使われる 条件文のシンタックスを 記述しています。より多くの インフォメーションに関しては、 Examples of Conditional Statement Syntax を 見て下さい。
この表と以下のリストが、条件式で使うシンタックスを 要約しています。
アイテム | シンタックス |
---|---|
値 | 記号 | リテラル | 整数 |
比較演算子 | < | > | <= | >= | = | <> |
項 | 値 | 値 比較演算子 値 | ( 式 ) |
ブール演算要素 | 項 | NOT 項 |
ブール演算項 | ブール演算要素 | ブール演算要素 AND 項 |
式 | ブール演算項 | ブール演算項 OR 式 |
記号 | プロパティ | %環境変数 | $コンポーネントアクション | ?コンポーネント状態 | &フィーチャーアクション | !フィーチャー状態 |
以下の表は、条件式で使う為の様々なシステムとインストーラー情報に アクセスするのに使う プリフィックスを示しています。
記号のタイプ | プリフィックス | 値 |
---|---|---|
インストーラー プロパティ | (なし) | Property table の値 |
環境変数 | % | 環境変数の値 |
Component table キー | $ | コンポーネントのアクションの状態 |
Component table キー | ? | コンポーネントのインストール済み状態 |
Feature table キー | & | フィーチャーのアクションの状態 |
Feature table キー | ! | フィーチャーのインストール済み状態 |
以下の表は、条件式中の論理演算子を 優先順位の高いものから低いものへの順で 示しています。
演算子 | 意味 |
---|---|
Not | プリフィックス一項演算子、即ち 続く項の状態を逆にする。 |
And | もし 両方の項が TRUE なら TRUE。 |
Or | もし どちらか一方の項 または 両方が TRUE なら TRUE。(訳注:片方でも TRUE なら) |
Xor | もし 両方の項が TRUE を除いて どちらか一方が TRUE なら TRUE。(訳注:片方だけ TRUE なら) |
Eqv | もし 両方の項が TRUE または 両方が FALSE なら TRUE。 |
Imp | もし 左の項が FALSE あるいは 右の項が TRUE なら TRUE。 |
以下の表は、条件式で使われる比較演算子を示しています。これらの比較演算子は、2つの値の間で だけ 生じ得ます。
演算子 | 意味 |
---|---|
= | もし 左辺値が右辺値に等しいなら TRUE。 |
<> | もし 左辺値が右辺値に等しくないなら TRUE。 |
> | もし 左辺値が右辺値より大きいなら TRUE。 |
>= | もし 左辺値が右辺値より大きいか 等しいなら TRUE。 |
< | もし 左辺値が右辺値より小さいなら TRUE。 |
<= | もし 左辺値が右辺値より小さいか 等しいなら TRUE。 |
以下の表は、条件式で使われる部分文字列演算子を示しています。部分文字列演算子は、2つの 文字列値の間でだけ 生じ得ます。
演算子 | 意味 |
---|---|
>< | もし 左辺の文字列が右辺の文字列を含んでいれば TRUE。 |
<< | もし 左辺の文字列が右辺の文字列で始まっていれば TRUE。 |
>> | もし 左辺の文字列が右辺の文字列で終わっていれば TRUE。 |
以下の表は、条件式で使われるビット単位の数値演算子を示しています。これらの演算子は、2つの 整数値の間でだけ 生じ得ます。
演算子 | 意味 |
---|---|
>< | ビット単位の AND、もし 左辺と右辺の整数がどのビットも共通で持っていれば TRUE。 |
<< | もし 左辺の整数の上16ビットが 右辺の整数と等しければ TRUE。 |
>> | もし 左辺の整数の下16ビットが 右辺の整数と等しければ TRUE。 |
以下の表は、フィーチャーとコンポーネントのオペレータ記号を使うのに どこでそれが有効か を 示しています。
オペレータ <状態> | このシンタックスが有効な場所 |
---|---|
$コンポーネントアクション | Condition table 中と CostFinalize action 後のシーケンステーブル中。 |
&フィーチャーアクション | Condition table 中と CostFinalize action 後のシーケンステーブル中。 |
!フィーチャー状態 | Condition table 中と CostFinalize action 後のシーケンステーブル中。 |
?コンポーネント状態 | Condition table 中と CostFinalize action 後のシーケンステーブル中。 |
以下の表は、条件式で使われるフィーチャーとコンポーネントの状態値を 示しています。これらの 状態は、直接か CostFinalize action によって MsiSetInstallLevelがコールされるまで セットされません。
状態 | 値 | 意味 |
---|---|---|
INSTALLSTATE_UNKNOWN | -1 | フィーチャーやコンポーネントでとられるべきアクションがない。 |
INSTALLSTATE_ADVERTISED | 1 | アドバタイズド フィーチャー。この状態はコンポーネントでは利用できません。 |
INSTALLSTATE_ABSENT | 2 | フィーチャーやコンポーネントが存在しない。 |
INSTALLSTATE_LOCAL | 3 | ローカルコンピューター上にフィーチャーやコンポーネントがある。 |
INSTALLSTATE_SOURCE | 4 | フィーチャーやコンポーネントはソースから実行される。 |
(訳注: 以下 アクセス プリフィックスに注意。)
例えば 条件式 "&MyFeature=3" は、MyFeature がその現在の状態から ローカルコンピューター 上でインストールされている状態 INSTALLSTATE_LOCAL に変化している時にだけ、True に評価され ます。
Component1 がコンピューター上でローカルにインストールされているかどうかをチェックするのに 条件 $Component1=3 に依存すぺきではない事に 注意して下さい。これは、もし Component1 が 1つ以上のプロダクトによってインストールされていると 失敗する事があります。Component1 が Product1 によってローカルにインストールされてしまった後、インストーラーは Product2 の インストール中 条件 $Component1=3 を False と評価します。これは、インストーラーが コンポーネントのキーパスを使ってコンポーネントのバージョンを決定し、もし そのバージョンが インストールされたコンポーネント以上なら インストールの為にコンポーネントにマークをつける ためです。
インストーラーは 条件文中の Version データ型の 直接比較を行わない事に 注意して下さい。例えば、条件文で "01.10" と "1.010" といったバージョンを比較するのに 比較演算子を使う事ができません。代わりに たとえば Searching for Existing Applications, Files, Registry Entries or .ini File Entries で 述べられている様に バージョンを探るのに妥当な方法を使って、プロパティをセットして下さい。
条件文でのプロパティの使用 ( Using Properties in Conditional Statements )