業務でインストーラーを作っていると、色々な事情で難しい要求が出てきたりする訳ですが、今回の事例もそんな物のひとつでした。
WiX Toolsetでインストーラーを作っていましたが、「最初に"WelcomeDlg"を出さないで"CustomizeDlg"を最初に出す。ExitDlgも出さない。」という仕様で実装することになりました(Dialog SetはWixUI_FeatureTreeの使用が前提です)。
WixUI Dialog Libraryでは、中間のダイアログを省いたり、カスタムなダイアログを挿入したり、といったことはできますが、"WelcomeDlg"を省く、なんてことはできません(誰かやり方知ってたら教えて!)。
そこで、インストーラー作成者のお友達、Orcaの登場です。見るべきところは、ここ。
InstallUISequenceでActionがxxxDlgとなっているところです。赤線で囲ったところは、最初に表示されるダイアログです。そう、WiX ToolsetのUIの起点はここにあるのです。WelcomeDlgとExit
Dialogダイアログで、あるパブリックプロパティ(ここではSHRINKUI)がセットされていたら、Conditionがfalseになるよう設定を変更します。
Action | Condition | Sequence |
---|---|---|
ExitDialog | NOT SHRINKUI | -1 |
WelcomeDlg | NOT SHRINKUI AND (NOT Installed OR PATCH) | 1298 |
そして、下記のようにインストーラーを実行すると、WelcomeDlgとExitDialogが表示されないことが確認できます。
msiexec SHRINKUI=1 /i dlgTest.msi
ただ、これだとProgressDlgまでの全てのダイアログが表示されません。SHRINKUIがセットされているときは、CustomizeDlg以降を表示させるようにします。
InstallUISequenceに下記の行を追加します。
Action | Condition | Sequence |
---|---|---|
CustomizeDlg | SHRINKUI | 1295 |
再度、コマンドラインオプションにSHRINKUIプロパティを指定してインストーラーを起動すると、仕様の通りCustomizeDlg以降が表示されるようになります。
ここまでの編集で、InstallUISequenceは下記のようになりました。