Lesson 6 COM、式の構文、その他

2. 式の構文

私たちは既に条件式を使った事があります。 中でも、Condition タグと Publish タグで、条件式を使いました。 NOT, AND, OR のような論理演算子も、<, >, = のような比較演算子も知っています。 以下に優先順位に従って、すべての演算子を記載します。

論理演算子

  • NOT : 前置単項演算子。次に来る項の論理値を反転させる。
  • AND : 論理積 (両方が 真 なら、真)
  • OR : 論理和 (どちらかまたは両方が 真 なら、真)
  • XOR : 排他的論理和 (どちらか一方だけが 真 なら、真)
  • EQV : 等値 (どちらも 真 か、どちらも 偽 なら、真)
  • IMP : 含意 (左 が 偽 か、右 が 真 なら、真)

比較演算子

  • = : 等しい
  • <> : 等しくない
  • > : より大きい
  • >= : より大きいか、または、等しい
  • < : より小さい
  • <= : より小さいか、または、等しい
  • ˜= : 等しい (大文字と小文字を区別しない)
  • ˜<> : 等しくない (大文字と小文字を区別しない)
  • ˜> : より大きい (大文字と小文字を区別しない)
  • ˜>= : より大きいか、または、等しい (大文字と小文字を区別しない)
  • ˜< : より小さい (大文字と小文字を区別しない)
  • ˜<= : より小さいか、または、等しい (大文字と小文字を区別しない)

部分文字列演算子 (文字列間のみ)

  • >< : 左 は 右 を含んでいる
  • « : 左 は 右 から始まっている
  • » : 左 は 右 で終っている

ビット演算子 (整数間のみ)

  • >< : ビット単位の AND
  • « : 左 の上位16ビットが 右 に等しい
  • » : 左 の下位16ビットが 右 に等しい

XML では普通のことですが、かぎ括弧を使うときは、間違って XML のタグの開始文字または終了文字として解釈されないように 注意しなければならない、ということを心に留めてください。 曖昧さを排するためには、XML の文字データ・メカニズムを使って、そういう条件をエスケープしなければなりません。 条件式を <![CDATA[]]> で囲むのです。

<![CDATA[IAgree <> "Yes"]]>

最も安全な方法は条件式を全てラップすることでしょう (WiX のデコンパイラ、Dark はまさしくそうします)。 けれども — 少なくとも私の考えでは — それではソースがあまりにも読みにくくなります。 それが嫌なら、本当に必要な所だけにラッパーを使うために、どの式が曖昧でどの式がそうでないかについて自分で配慮しなければなりません (何か理解できない所があれば、コンパイラがエラー・メッセージを出してくれます)。 どちらを選ぶかは、あなた次第です …

式の中のプロパティ

これらの式の中において、プロパティ名を使うことが出来ます (プロパティ名は大文字と小文字を区別することを思い出して下さい)。 存在しないプロパティ名は空の文字列として扱われます。 プロパティの論理値は、プロパティが設定されているか否か、という事を示します — つまり、単にプロパティを使うだけでは、そのプロパティが持つ論理値をチェックすることは 出来ない、という事です。

  • PROPERTY : プロパティが設定されていて何らかの値を持っていれば、たとえその値が偽であっても、真と評価されます。
  • NOT PROPERTY : プロパティが全く設定されていない場合に真と評価されます。

プレフィックス

いくつかの特殊な文字を名前の前に付けると、特別な意味になります。

  • % : 環境変数 (名前は大文字と小文字を区別しません)
  • $ : コンポーネントのアクション後の状態
  • ? : コンポーネントの現在のインストール状態
  • & : 機能のアクション後の状態
  • ! : 機能の現在のインストール状態

後の四つは次の整数値を取り得ます。

  • -1 : どんなアクションも実行されない
  • 1 : アドバタイズされている (機能についてのみ該当)
  • 2 : インストールされていない
  • 3 : ローカル・コンピュータ上にインストールされている
  • 4 : ソースから実行される

より明確にするために、いくつか例を挙げましょう。

  • (&FeatureName = 3) AND NOT (!FeatureName = 3) : 製品がローカルにインストールされる場合にだけアクションを実行します。再インストールの場合はアクションを実行しません。 &FeatureName = 3 という項は、アクションがその機能をローカルにインストールするものであることを意味します。 NOT (!FeatureName = 3) という項は、その機能がローカルにインストールされていないことを意味します。
  • (&FeatureName = 2) AND (!FeatureName = 3) : その機能がアンインストールされる場合にだけアクションを実行します。 この条件式は、機能がローカルにインストールされている状態から存在しない状態へと遷移する場合だけを捕まえます。
  • (?ComponentName = 3) AND ($ComponentName = 2 OR $ComponentName = 4) : コンポーネントがローカルにインストールされていて、そうでない状態へと遷移する場合にだけ、アクションを実行します。 ?ComponentName = 3 という項は、コンポーネントがローカルにインストールされていることを意味します。 $ComponentName = 2 という項は、コンポーネントのアクション後の状態が「存在しない」であることを意味します。 $ComponentName = 4 という項は、コンポーネントのアクション後の状態が「ソースから実行される」であることを意味します。 コンポーネントに対しては、「アドバタイズされている」という状態は当てはまらないことに注意して下さい。
  • ?ComponentName = $ComponentName : コンポーネントが(現在と同じ状態で)再インストールされる場合にだけアクションを実行します。

↑ 先頭  |  • 目次  |  « 前へ  |  次へ »  |  ∗ 原文

Table of Contents

1 始めよう

  1. ソフトウェア・パッケージ
  2. 中に入るファイル
  3. 使用に供する
  4. 便利な追加機能
  5. どこにインストールするか
  6. 条件付きインストール
  7. ファイルだけでなく
  8. 削除時の孤児化

2 ユーザー・インタフェイス

  1. 最初のステップ
  2. カスタムの設定
  3. UI の魔法
  4. 英語はわかりますか
  5. チェーンの新しい環
  6. 地域化を考える

3 イベントとアクション

  1. 列に並んで
  2. 追加のアクション
  3. 本に書かれていないこと
  4. コントロールをコントロールせよ
  5. マネージする方法
  6. 後の段階で

4 アップグレードとモジュラー化

  1. 古いのを探す
  2. 自分自身を置き換える
  3. パッチワーク
  4. 断片
  5. 融合するもの

5 Net と .NET

  1. .NET の枠組み
  2. ブートストラップ
  3. インターネットを起動する
  4. ウェブ・ディレクトリ
  5. サービスの提供

6 COM、式の構文、その他

  1. 違う色のコンポーネント
  2. 式の構文
  3. 書式指定文字列
  4. DDE 接続
  5. ディレクトリの作成
  6. 複数メディアのインストーラ
  7. プログラムの追加と削除の項目
  8. 新顔のユーザー
  9. 環境に優しく
  10. XML
  11. COM+ アプリケーション
  12. バージョンごとに

7 SQL

  1. データベースを作成する

8 ユーザー・インタフェイス再び

  1. 一つだけのダイアログ
  2. チューニング・アップ
  3. 相互作用
  4. カスタマイズがいっぱい
  5. これが進捗ですか
  6. よく出来ました
  7. 法律用語
  8. 順番外
  9. 英語はわかりませんか

9 トランスフォーム

  1. インストーラを変形する

10 標準ライブラリ

  1. カスタム・アクションとユーザー・インタフェイス
  2. お静かに願います