2

Wix/Burn (3.6 リリース バージョン) に基づいて、ウィザード スタイルのカスタム ブートストラップを作成しています。Wix 3.6 ブートストラップ コードに基づいています。

問題は、バンドルの一部である setup.msi のインストール状態をブートストラップで検出できないことです。

私が理解しているように、必要なのは Engine.Detect() を呼び出すことだけです。ここで、Engine は Bootstrapper アプリケーションからの Wix エンジンのインスタンスです。その時点で、Bootstrapper.Command.Action を調べて、必要な起動アクションを確認できるはずです。

私のバンドルには、.NET 4 (Web インストール) と私の setup.msi の 2 つのアイテムが含まれています。

ウィザードをメンテナンス モードにするか、インストール モードにするかを決定する手順が不足していると思われます。

4

2 に答える 2

4

まず、パッケージが検出されているかどうかを判断するには、現在のユーザーの一時ディレクトリにあるログ ファイルを確認します。パッケージが検出されたかどうかがわかります。

メンテナンス モードとインストール モードのどちらに移行するかを判断するために、DetectPackageComplete イベントをサブスクライブしてパッケージの状態を確認できます。以下の例では、私の UI は InstallEnabled と UninstallEnabled の 2 つのプロパティを使用して、ユーザーに表示する「モード」を決定します。

private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e)
    {
        if (e.PackageId == "DummyInstallationPackageId")
        {
            if (e.State == PackageState.Absent)
                InstallEnabled = true;
            else if (e.State == PackageState.Present)
                UninstallEnabled = true;
        }
    }

上記のコード サンプルは、カスタム WiX Managed Bootstrapper Applicationを作成するために必要な最小限の要素に関する私のブログ投稿からのものです。

于 2013-01-09T17:10:05.510 に答える
3

バンドルが既にインストールされているかどうかを判断する簡単な方法は、WixBundleInstalled変数を使用することです。バンドルが正常にインストールされると、ゼロ以外に設定されます。

さらに、WiX v3.7+ ではOnDetectBegin、バンドルがインストールされているかどうかがコールバックによって通知されるようになったため、通常は変数を照会する必要がなくなりました。

これらの変更は、@BryanJ が提案した完全に合理的な解決策を回避するために、メンテナンス モードを検出しやすくするために行われました。

于 2013-04-09T14:18:52.310 に答える