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

时间:2013-01-09 15:18:49

标签: wix windows-installer wix3.6 bootstrapper burn

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

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

据我了解,所需要的只是调用Engine.Detect(),其中Engine是Bootstrapper应用程序中Wix引擎的一个实例。那时我应该能够查看Bootstrapper.Command.Action以查看所需的启动操作。

我的软件包包含两个项目:.NET 4(Web安装)和我的setup.msi。

我怀疑我错过了确定是否应该将我的向导置于维护模式与安装模式之间的步骤。

2 个答案:

答案 0 :(得分:4)

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

现在,要确定是否进入维护模式与安装模式,您可以通过订阅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;
        }
    }

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

答案 1 :(得分:3)

确定您的Bundle是否已安装的简单方法是使用WixBundleInstalled变量。成功安装Bundle后,这将设置为非零。

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

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