5

Wix Burn を使用してプロジェクトの必要条件ごとにインストールし、ManagedBootstrapperApplicationHostを使用してカスタム UI を作成し、Wix ソース コードから入手可能なプロジェクトに従ってマネージド WPF アプリケーションを作成しました。

ここでの問題は、表示される進行状況 (メッセージ) が、組み込みの UI - WixStandardBootstrapperApplication.RtfLicenseを使用している進行状況メッセージと一致しないことです。

基本的に、Wixソースから次のコードを使用しています

 private void ExecuteMsiMessage(object sender, ExecuteMsiMessageEventArgs e)
        {
            lock (this)
            {
                this.Message = e.Message;
                e.Result = this.root.Canceled ? Result.Cancel : Result.Ok;
            }
        }

通常の進行状況ダイアログと同じ表示をするにはどうすればよいですか? PlanPackage などの他のメソッドからメッセージを個別に設定する必要がありますか?

4

1 に答える 1

6

今日、wixstdba はアクション データの進行状況メッセージを表示しません。wix-devs メーリング リストでこの機能を追加することについて話している人がいましたが、まだ実現していません。管理された場合のようなコードをwixstdbaに追加するだけです(まだありません)。

インストールされているパッケージの名前を wixstdba と同じ方法で表示したいだけの場合は、Engine.OnCachePackageBegin()およびEngine.ExecutePackageBegin()コールバックを処理する必要があります。これらのコールバックは、パッケージのダウンロードとインストールがいつ開始されるかをそれぞれ通知します。これらのコールバックへの引数の一部として、パッケージ ID が提供されます。

わかりやすい表示名を取得するにはBootstrapperApplicationData.xml、Bootstrapper Application .dll の横に自動的に含まれる を読み取ります。にはWixPackageProperties、バンドル内のパッケージに関する多くの情報を提供する要素があり、DisplayName.

--- 申し訳ありませんが、以下は質問されていない質問への回答です。---

Engine.ExecuteMsiMessage()コールバックは、Windows インストーラーがメッセージ (アクション データやユーザーに入力を促す要求など) を表示するときに呼び出されます。進行状況は、3 つの異なるコールバックを介して提供されます。

  1. コールバックを介して全体的な進行状況を取得できEngine.Progressます。これは非常に大まかな進行状況であり、基本的に各パッケージがキャッシュされて実行されると移動します。

  2. を介して、全体および個々のパッケージの進行状況を取得できますEngine.CacheAcquireProgress。この進行状況は、各パッケージがダウンロード/コピーされ、パッケージ キャッシュに配置されることが検証されるにつれて移動します。

  3. コールバックを介して、全体的および個々のパッケージの進行状況を取得できEngine.ExecuteProgressます。この進行状況は、各パッケージがインストール/修復/アンインストールされると移動します。

そのためEngine.Progress、全体的な進行状況が表示され、単一の進行状況バーには非常に使いやすいですが、進行状況バーは非常にスムーズに移動しません。に を追加するEngine.CacheAcquireProgressと、全体的な進行がよりスムーズになりEngine.ExecuteProgressます。注: これにより、200 になるプログレス バーが表示されます。

ファイルで、WixBA がこれらすべてをどのように処理するかを確認できsrc\Setup\WixBA\ProgressViewModel.csます。

于 2013-04-08T13:46:33.630 に答える