2

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

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

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

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

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

4

2 回答 2

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

上面的代码示例来自我关于创建自定义 WiX 托管引导程序应用程序所需的最少部分的博客文章。

于 2013-01-09T17:10:05.510 回答
3

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

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

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

于 2013-04-09T14:18:52.310 回答