WiX Toolset – インストール・シーケンス

インストールの途中でユーザにメッセージを出したり、プロダクトキーの入力を促し、キーの正当性を検査したりするには、独自のカスタムアクションを作成し、ユーザインターフェースをカスタマイズしなければいけません。

しかし、解説書の説明は的確ではなく、実際の動作がどうなっているのかよく分からないのですが、ともかく、解説書に書いていることと、実際にやって確認したことをご説明いたします。

参考にした解説は、WiX3.6: A Developer’s Guide to Windows Install XML   (PACKT 2012)と、[WiX Toolset チュートリアル](日本語訳)です。

Windows Installerは、インストールの途中で以下のステップ(アクション)を実行します。この他にも必要であれば、ユーザは独自にアクションを作成し、実行することができます。

FindRelatedProducts
AppSearch
LaunchConditions
ValidateProductID
CostInitialize
FileCost
CostFinalize
MigrateFeatureStates
ExecuteAction
InstallValidate
InstallInitialize
ProcessComponents
UnpublishFeatures
RemoveShortcuts
RemoveFiles
InstallFiles
CreateShortcuts
RegisterUser
RegisterProduct
PublishFeatures
PublishProduct
InstallFinalize
RemoveExistingProducts

実行の順番を変更したり、ユーザのカスタムアクションを挿入することができますが、おおむね上から下に向かって実行されます。

実はこのSequenceは機能的に二つに分けて管理されます。

インストールプログラム(msiファイル)を起動すると、Welcome画面が出たり、ライセンス確認画面が出たり、インストール先のフォルダーを指定したりしますが、「インストールの準備完了」画面まではInstallerはユーザコンピュータに何の変更も加えていません。

「インストールの準備完了」画面でユーザが[インストール]ボタンをクリックすると、
上のExecuteActionが実行され、ここで初めて、インストーラはアプリケーションソフトをユーザ・コンピュータにインストールしていきます。

ExecuteActionから前のSequenceをInstallUISequenceといい、以降をInstallExecuteSequenceといいます。

InstallUISequenceでは上のアクションの最初からExecuteActionまで実行し、InstallExecuteSequenceでもまた最初から最後まで実行します(ExecuteActionを除いて)。

解説では今一つ分からないので、練習プログラムを実行しログをとってみました。
ログからアクション部分だけを抽出したものを下に示します。

 —–InstallUISequence
INSTALL 開始
FindRelatedProducts
PrepareDlg
AppSearch
LaunchConditions
ValidateProductID
CostInitialize
FileCost
CostFinalize
MigrateFeatureStates
WelcomeDlg。Dialog created
LicenseAgreementDlg。Dialog created
UserRegistrationDlg。Dialog created
CheckingPID。
SetupTypeDlg。Dialog created
VerifyReadyDlg。Dialog created
WelcomeDlg。 Dialog created
ProgressDlg。 Dialog created

ExecuteAction 開始
—–InstallExecuteSequence
INSTALL 開始
FindRelatedProducts
LaunchConditions
ValidateProductID
CostInitialize
FileCost
CostFinalize
MigrateFeatureStates
InstallValidate
RemoveExistingProducts
InstallInitialize
ProcessComponents
GenerateScript
ProcessComponents
UnpublishFeatures
UnpublishFeatures
RemoveRegistryValues
RemoveShortcuts
RemoveFiles
RemoveFolders
CreateFolders
InstallFiles
CreateShortcuts
WriteRegistryValues
RegisterUser
RegisterProduct
PublishFeatures
PublishProduct
InstallFinalize
INSTALL。 終了

ExecuteAction。 終了
ExitDialog
INSTALL。 終了

上でUserRegistrationDlgは標準Sequenceに追加したダイアログです。この画面でプロダクトキーを入力し、[次へ]をクリックするとカスタムアクションCheckingPIDがキーの正当性を検査します。

プロダクトキー入力待ち画面では、InstallUISequenceのWelcomeDlg作成アクションまで実行されています。

プロダクトキーが正しければ、下に示す[セットアップの種類の選択]画面が表示されますが、この段階で、InstallUISequenceのCheckingPIDアクションが終了しています。CheckingPIDはInstallExecuteSequenceでも実行されていますが、実際にはどうなっているのか分かりません。

ValidateProductIDアクションは解説書では、プロダクトキーの検査をするとなっていますが、プロダクトキー入力画面が表示される前に実行されていますし、実際になにをしているのかわかりません。

error: コピーできません !!