Wix Burn:自定义引导程序升级,但与旧版本并排安装
Posted
技术标签:
【中文标题】Wix Burn:自定义引导程序升级,但与旧版本并排安装【英文标题】:Wix Burn: Custom Bootstrapper upgrade but Installs side by side with older version 【发布时间】: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 升级的工作示例?
问候
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于Wix Burn:自定义引导程序升级,但与旧版本并排安装的主要内容,如果未能解决你的问题,请参考以下文章
Wix 3.7 Burn - 如何使用动态信息制作自定义启动画面
WiX 自定义操作在 MSI 中使用 [SourceDir] 和 Burn
如何防止 wix 自定义引导程序卸载 UI 在升级过程中显示