今回は DetectPackageComplete を追加する。
- Runメソッド変更
protected override void Run() { this.DetectPackageComplete += this.OnDetectPackageComplete; this.PlanComplete += this.OnPlanComplete; this.ApplyComplete += this.OnApplyComplete; Engine.Detect(); }
- DetectPackageComplete イベントハンドラ追加
private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e) { if (e.PackageId == "MySetup.msi") { if (e.State == PackageState.Absent) { Engine.Plan(LaunchAction.Install); } else if (e.State == PackageState.Present) { Engine.Plan(LaunchAction.Uninstall); } } }
これにより MySetup.exe を複数回起動すると、Install と Unistall が交互に繰り返されるようになる。
このとき、次のようなログが書かれる。
Detected package: MySetup.msi, state: Absent, cached: None
または
Detected package: MySetup.msi, state: Present, cached: Complete
何度実行しても常に Absent の場合は msi 作成時の ID 設定をチェックする。これが"*"の場合は Present にならない。"*"を固定の GUID に変更する。
Engine.Detect では他に次のイベント呼び出しがあるが、詳しく調べていない。
- DetectRelatedMsiPackage
- DetectRelatedBundle
- DetectComplete
次回で Bootstapper で msi 起動時のパラメータを設定し、言語切り替えを行えるようにする。
関連ブログ
VisualStudio 2017 Community & WiX tools & WiX Edit によるWindowsアプリ インストーラ(msi)作成
WiX toolset msi ダイアログ多国語対応
dotNetInstallerによるシンプルBootstarpper作成
WiX toolsetのBootstarpperを試してみた(1)
WiX toolsetのBootstarpperを試してみた(3)msiexecパラメータ設定
WiX toolsetのBootstarpperを試してみた(4)UI追加
Bootstrapper Application Interface
IBootstrapperApplicationの説明。ソースを見ていないが、ManagedBootstrapperApplicationHost はこれを実装し、C#の BootstrapperApplication のイベント呼び出しを行うものでしょう。
Creating a custom UI installer with WIX Burn Bootstrapper
WPFアプリケーションにブートストラッパ実装例。
EngineとBootstrapperの関係、イベント一覧があります。
発生順のイベントリストがあります。
0 件のコメント:
コメントを投稿