Wix Installer - 如何在回滚后立即运行自定义操作?

时间:2017-05-31 10:38:55

标签: wix windows-installer

我创建了一个具有多种功能的Wix安装程序,例如将服务部署到Tomcat,在tomcat服务器上添加和更新服务配置文件,以及其他一些,在IIS创建Web应用程序,创建MongoDB等。 所以要做一些更新配置类型的任务我已经用延迟执行编写自定义操作,有时由于某些原因自定义操作失败并导致回滚,有时这个回滚会留下一些脚印,如Tomcat或其他配置文件中的服务或者可能需要删除Mongo DB等。

所以我想在回滚发生后立即使用自定义操作删除左脚印。

我添加了自定义操作Execute="rollback"并将其称为Before="Installfinalize",但它只是在回滚发生之前调用。

有没有办法聪明地处理这种情况?

1 个答案:

答案 0 :(得分:0)

Rollback custom actions仅在发生故障后执行,并且仅在错误之前安排的子集执行。假设您需要提升权限,它们是您唯一的干净选项,因此我将首先验证您的操作安排的顺序。

在回滚发生后,还有一个地方可以尝试运行操作:作为Install UI Sequence的结尾。当显示完整UI的安装中发生错误时,它将运行UI序列条目msiDoActionStatusFailure( - 3)。通常,这会显示一个对话框,说明安装(或卸载)失败。并且很难做更多,因为属性不会从执行序列回流到UI序列。

理论上,您可以安排该条目的任何操作,以便先做一些事情。但是,此操作将以与UI相同的权限运行(通常是有限的),并且仅在显示UI时运行。所以这可能对你的场景没有帮助。 (另外,除非你小心,如果你没有调用它会显示的对话框,你将会陷入预期的UI体验。)