Lesson 3 イベントとアクション

4. コントロールをコントロールせよ

いや、確かに、前の章で私たちがしたことは、エレガントではありませんでした。 私たちは、後の段階になってからインストールを中止するのではなく、ユーザーがキーを入力するその場でチェックし、 警告を表示して、キーを入力し直すチャンスをユーザーに提供するべきです。 どうすればそれを達成できるか、見ていきましょう。

カスタム・アクションは、二種類のユーザー・インタフェイス・コントロール、プッシュ・ボタンとチェック・ボックスにリンクすることが出来ます。 このリンクを実行するためには、既に知っている Publish タグを使います。Value 属性がカスタム・アクションの名前を保持します。

<Control Id="..." Type="PushButton" ...>
  <Publish Event="DoAction" Value="CheckingPID">1</Publish>
</Control>

このようにすると、ユーザーが「ユーザー情報」ページの「次へ」ボタンを押した時に、DLL を呼ぶカスタム・アクションが引き起こされます。 カスタム・アクションはこの UI イベントにリンクされますので、もう InstallExecuteSequence タグの中にスケジュールする必要は有りません。 ただし、カスタム・アクションの定義はソースの中に残ります。

<CustomAction Id='CheckingPID' BinaryKey='CheckPID'
    DllEntry='CheckPID' />

ユーザーに警告をするためにメッセージ・ボックスが要ります。 これも、また、前に作成した「ユーザー情報」ページと同じようなダイアログです。 前と同じように、断片(fragment)として独立したソース・ファイルに入れて、DialogRef タグを使って参照することも出来ます。 しかし、ここでは、もう一つの解法があることを示すために、直接にメインのソース・ファイルの UI セクションの直下で定義することにします。

<Dialog Id="InvalidPidDlg" Width="260" Height="85"
    Title="[ProductName] [Setup]" NoMinimize="yes">
  <Control Id="Icon" Type="Icon"
      X="15" Y="15" Width="24" Height="24"
      ToolTip="Information icon" FixedSize="yes" IconSize="32"
      Text="Exclam.ico" />
  <Control Id="Return" Type="PushButton"
      X="100" Y="57" Width="56" Height="17"
      Default="yes" Cancel="yes" Text="&amp;Return">
    <Publish Event="EndDialog" Value="Return">1</Publish>
  </Control>
  <Control Id="Text" Type="Text"
      X="48" Y="15" Width="194" Height="30" TabSkip="no">
    <Text>
      入力されたユーザー・キーは無効です。
      インストール CD のケースのラベルに印刷されているキーを入力してください。
    </Text>
  </Control>
</Dialog>

「ユーザー情報」ページも更新しなければなりません。 と言うのは、このダイアログからカスタム・アクションと新しいメッセージ・ボックスを呼び出さなければならないからです。

<Control Id="Next" Type="PushButton"
    X="236" Y="243" Width="56" Height="17"
    Default="yes" Text="[ButtonText_Next]">
  <Publish Event="DoAction" Value="CheckingPID">1</Publish>
  <Publish Event="SpawnDialog"
      Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>
  <Publish Event="NewDialog"
      Value="SetupTypeDlg">PIDACCEPTED = "1"</Publish>
</Control>

さあ、これで、ユーザーが「次へ」ボタンを押すと、DLL の中の関数が呼ばれます (条件である 1 に評価されるため、毎回呼ばれます)。 DLL の中の関数は PIDKEY プロパティをチェックして、キーが承認されたかどうかを示すために PIDACCEPTED をセットします。 承認された場合は、SetupTypeDlg へと進みます。承認されなかった場合は、エラー・メッセージを表示します。

あと一つだけ、小さな項目が残っています。 メッセージ・ボックスの中でアイコンに言及していますので、これもインストーラの中に入れなければなりません。

  <Binary Id="Exclam.ico" SourceFile="Exclam.ico" />

全体のソースは、SampleAskKey として、ダウンロードすることが出来ます。

訳註:SampleAskKey の日本語版は Sample-3-4-AskKey.zip です。

ところで、ログ・ファイルにユーザー・キーが出現するのは、必ずしも、良いことでも安全なことでもありません。 これを回避するためには、以下のように記述します。

<Property Id="PIDKEY" Hidden='yes' />

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

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. お静かに願います