【问题标题】:Wix Burn: Custom Bootstrapper upgrade but Installs side by side with older versionWix Burn:自定义引导程序升级,但与旧版本并排安装
【发布时间】:2014-02-18 13:01:28
【问题描述】:

我正在努力解决我的自定义引导程序升级问题。通过关注this thread,我正在使用 LaunchAction.Install。

这确实升级了产品以及 Boostrapper,但旧的 Bootstrapper 仍然存在,如下面的屏幕截图所示。

如果我从这里调用 1.0.0.0 版,它将显示要安装的对话框,但不会执行任何操作。但是,调用 1.0.1.0 版将使我可以选择卸载产品。但是,在卸载时,它只会删除自己,并且留下“我的产品”。

我也试过

_bootstrapper.Engine.Plan(LaunchAction.UpdateReplace);

_bootstrapper.Engine.Plan(LaunchAction.UpdateReplaceEmbedded);

但它没有效果。

问题:如何在不出现上述情况的情况下升级旧安装?谁能提供一个 CustomBA 升级的工作示例?

问候

【问题讨论】:

    标签: wix bootstrapper burn


    【解决方案1】:

    检查 PlanRelatedBundle 事件。在这里您可以告诉引擎如何处理旧包。

    如果你想要一个 Bundle 来替换旧的,UpgradeCode 应该是相同的。在这种情况下,它将默认卸载旧包。 旧包也需要支持静默卸载,因为它会在安装新包后使用参数 /quit 调用。

    您可以在 BootstrapperApplication.Command.Display 属性中检查它。如果它是从另一个 Bundle 调用的,它应该是“嵌入的”。在这种情况下,BootstrapperApplication.Command.Action 设置为“卸载”。

    如果这些都不起作用,请检查在 AppData\Temp 文件夹中创建的日志。

    【讨论】:

    • WIX 本身使用自定义 BA,因此查看 WIX 源代码以了解它如何处理命令行卸载是查看示例的好地方。
    【解决方案2】:

    我也遇到过这个问题。我必须编写自己的托管引导应用程序。我有一个错误,我在 Detect() 阶段完成之前开始了 Plan() 阶段。

    因此,旧捆绑包没有按应有的方式卸载。

    为引导程序提供的每个事件实现一个处理程序是一种很好的做法。在每个处理程序中写入一个日志条目,列出提供给处理程序的参数。它使追查错误变得容易得多。

    在我的情况下,我从 InstallShield 2009 迁移到 WiX 3.10,我必须编写自己的托管引导程序,因为我必须根据来自精美 WPF 助推器的用户输入有条件地安装 SQL Server express。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-03
      • 2012-03-17
      • 2011-12-12
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多