WiX:更新/卸载时回滚无法正常工作

时间:2014-01-02 05:44:09

标签: .net wix

我们为使用WiX的某个产品构建了一个基于.NET的自定义安装程序,我们目前正在尝试实施安装运行时显示的“取消”按钮。单击此按钮时,应在应用程序终止之前回滚安装。

我通过在Progress事件上由引导程序调用的方法中将e.Result设置为Result.Cancel来启动回滚。这在第一次安装应用程序时工作正常。但是,当我在更新或卸载应用程序时取消时,应用程序总是最终被卸载(应用程序的文件被删除)。

通过调用Engine.Plan(LaunchAction.Install)启动更新,我想知道这是否是在更新期间取消时应用程序最终被卸载的原因(但是,这不能解释为什么取消卸载无法正常工作:/)。我尝试使用LaunchAction.UpdateReplace,但我没有让它工作。我已经读过,为了使用UpdateReplace,首先必须调用Engine.SetUpdate()。由于我希望更新发生在用户执行的同一个exe文件中,我尝试按如下方式调用它:

Engine.SetUpdate(null, null, 0, UpdateHashType.None, null);

但是在日志文件中,我得到的错误与我在不调用SetUpdate()时使用UpdateReplace时的错误相同:

[21A0:1C1C][2013-12-23T11:44:51]e000: Error 0x8000ffff: Invalid package type.
[21A0:1C1C][2013-12-23T11:44:51]e000: Error 0x8000ffff: Failed to plan execute package.
[21A0:1C1C][2013-12-23T11:44:51]e000: Error 0x8000ffff: Failed to process update package.
[21A0:1C1C][2013-12-23T11:44:51]e000: Error 0x8000ffff: Failed to plan update.

我观察到当我直接运行.MSI文件(而不是自定义exe安装程序)时,我在运行时取消升级,它似乎正常回滚。因此看起来.wxs文件中的配置很好。

请告知我是否在正确的道路上以及如何让回滚工作。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,在更新/卸载时没有回滚功能。 我通过将MSI包的缓存属性设置为" yes"。

来解决此问题
<MsiPackage Id="SomeId" DisplayName="Name" SourceFile="Source" Cache="yes"/>

缓存=&#34;是&#34; - 是默认行为,但在我的项目中,它被设置为&#34; no&#34;。