ホーム

私訳です。より確かな記述は MSDN (英語)を直接読んで下さい。

 

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_ADVERTISED1アドバタイズド フィーチャー。この状態はコンポーネントでは利用できません。
INSTALLSTATE_ABSENT2フィーチャーやコンポーネントが存在しない。
INSTALLSTATE_LOCAL3ローカルコンピューター上にフィーチャーやコンポーネントがある。
INSTALLSTATE_SOURCE4フィーチャーやコンポーネントはソースから実行される。

(訳注: 以下 アクセス プリフィックスに注意。)

例えば 条件式 "&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 で 述べられている様に バージョンを探るのに妥当な方法を使って、プロパティをセットして下さい。

See Also

条件文でのプロパティの使用 ( Using Properties in Conditional Statements )