Lesson 3 イベントとアクション
4. コントロールをコントロールせよ
いや、確かに、前の章で私たちがしたことは、エレガントではありませんでした。 私たちは、後の段階になってからインストールを中止するのではなく、ユーザーがキーを入力するその場でチェックし、 警告を表示して、キーを入力し直すチャンスをユーザーに提供するべきです。 どうすればそれを達成できるか、見ていきましょう。
カスタム・アクションは、二種類のユーザー・インタフェイス・コントロール、プッシュ・ボタンとチェック・ボックスにリンクすることが出来ます。 このリンクを実行するためには、既に知っている Publish タグを使います。Value 属性がカスタム・アクションの名前を保持します。
このようにすると、ユーザーが「ユーザー情報」ページの「次へ」ボタンを押した時に、DLL を呼ぶカスタム・アクションが引き起こされます。 カスタム・アクションはこの UI イベントにリンクされますので、もう InstallExecuteSequence タグの中にスケジュールする必要は有りません。 ただし、カスタム・アクションの定義はソースの中に残ります。
ユーザーに警告をするためにメッセージ・ボックスが要ります。 これも、また、前に作成した「ユーザー情報」ページと同じようなダイアログです。 前と同じように、断片(fragment)として独立したソース・ファイルに入れて、DialogRef タグを使って参照することも出来ます。 しかし、ここでは、もう一つの解法があることを示すために、直接にメインのソース・ファイルの UI セクションの直下で定義することにします。
「ユーザー情報」ページも更新しなければなりません。 と言うのは、このダイアログからカスタム・アクションと新しいメッセージ・ボックスを呼び出さなければならないからです。
さあ、これで、ユーザーが「次へ」ボタンを押すと、DLL の中の関数が呼ばれます
(条件である 1
が 真 に評価されるため、毎回呼ばれます)。
DLL の中の関数は PIDKEY プロパティをチェックして、キーが承認されたかどうかを示すために PIDACCEPTED をセットします。
承認された場合は、SetupTypeDlg へと進みます。承認されなかった場合は、エラー・メッセージを表示します。
あと一つだけ、小さな項目が残っています。 メッセージ・ボックスの中でアイコンに言及していますので、これもインストーラの中に入れなければなりません。
全体のソースは、SampleAskKey として、ダウンロードすることが出来ます。
訳註:SampleAskKey の日本語版は Sample-3-4-AskKey.zip です。
ところで、ログ・ファイルにユーザー・キーが出現するのは、必ずしも、良いことでも安全なことでもありません。 これを回避するためには、以下のように記述します。