自定义Wix Burn引导程序不';无法检测MSI安装状态

自定义Wix Burn引导程序不';无法检测MSI安装状态,wix,windows-installer,wix3.6,bootstrapper,burn,Wix,Windows Installer,Wix3.6,Bootstrapper,Burn,我正在创建一个基于Wix/Burn(3.6版本)的自定义向导式引导程序。我基于WIX3.6引导程序代码 问题是我无法让引导程序检测作为捆绑包一部分的setup.msi的安装状态 据我所知,所需的只是调用Engine.Detect(),其中Engine是Bootstrapper应用程序中Wix引擎的一个实例。在这一点上,我应该能够在Bootstrapper.Command.Action中查看所需的启动操作是什么 My bundle包含两项:.NET 4(web安装)和My setup.msi 我怀

我正在创建一个基于Wix/Burn(3.6版本)的自定义向导式引导程序。我基于WIX3.6引导程序代码

问题是我无法让引导程序检测作为捆绑包一部分的setup.msi的安装状态

据我所知,所需的只是调用Engine.Detect(),其中Engine是Bootstrapper应用程序中Wix引擎的一个实例。在这一点上,我应该能够在Bootstrapper.Command.Action中查看所需的启动操作是什么

My bundle包含两项:.NET 4(web安装)和My setup.msi


我怀疑我缺少一个步骤来确定是否应该将向导置于维护模式和安装模式。

首先,要确定是否检测到包,您可以检查当前用户临时目录中的日志文件。它将告诉您是否已检测到该包

现在,要确定是否进入维护模式与安装模式,您可以通过订阅DetectPackageComplete事件来检查软件包状态。在下面的示例中,我的UI使用两个属性,InstallEnabled和UninstallEnabled来确定向用户显示的“模式”

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;
        }
    }

上面的代码示例来自我的博客文章,内容是创建包所需的最少部分。

确定包是否已安装的简单方法是使用
WixBundleInstalled
变量。成功安装捆绑包后,该值将设置为非零

此外,在WiX v3.7+中,
OnDetectBegin
回调现在会告诉您是否安装了捆绑包,因此您不必正常查询变量


做出这些更改是为了更容易检测维护模式,以避免@BryanJ建议的完全合理的解决方案。

谢谢Bryan。我来试试看。找这个:)。。谢谢@BryanJ