Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix Burn:自定义引导程序升级,但与旧版本同时安装_Wix_Bootstrapper_Burn - Fatal编程技术网

Wix Burn:自定义引导程序升级,但与旧版本同时安装

Wix Burn:自定义引导程序升级,但与旧版本同时安装,wix,bootstrapper,burn,Wix,Bootstrapper,Burn,我正在努力解决我的自定义引导程序升级问题。通过以下步骤,我使用的是LaunchAction.Install 这确实升级了产品和Bootstrapper,但旧的Bootstrapper仍然存在,如下面的屏幕截图所示 如果从这里调用1.0.0.0版,它将显示要安装的对话框,但不会执行任何操作。但是,调用1.0.1.0版会给我卸载产品的选项。然而,卸载后,它只会删除自身,而“我的产品”将被丢弃 我也试过了 _bootstrapper.Engine.Plan(LaunchAction.UpdateRe

我正在努力解决我的自定义引导程序升级问题。通过以下步骤,我使用的是LaunchAction.Install

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

如果从这里调用1.0.0.0版,它将显示要安装的对话框,但不会执行任何操作。但是,调用1.0.1.0版会给我卸载产品的选项。然而,卸载后,它只会删除自身,而“我的产品”将被丢弃

我也试过了

_bootstrapper.Engine.Plan(LaunchAction.UpdateReplace);

但它没有效果

问题:如何升级旧安装而不陷入上述情况?任何人都可以提供CustomBA升级的工作示例吗


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

如果您想要一个捆绑包来替换旧的捆绑包,那么两者的升级代码应该相同。在这种情况下,它将默认卸载旧的捆绑包。 另外,旧捆绑包需要支持安静卸载,因为在安装新捆绑包后,将使用参数/quit调用它

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


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

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

因此,旧的bundle没有像应该的那样卸载

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


在我的例子中,我正在从InstallShield 2009迁移到WiX 3.10,我必须编写自己的托管引导程序,因为我必须根据用户从一个奇特的WPF引导程序的输入有条件地安装SQL Server express。

WiX本身使用一个自定义BA,因此,查看WIX源代码以了解其如何处理命令行卸载是查看示例的好地方。
_bootstrapper.Engine.Plan(LaunchAction.UpdateReplaceEmbedded);