Wix回滚自定义操作在升级取消时无效

时间:2016-11-14 05:38:51

标签: wix windows-installer wix3.8

我不知道为什么回滚操作在升级过程中不起作用,但它在安装过程中工作,我已经尝试了几乎所有我在谷歌找到的方法,我真的希望我能在这里找到答案,所以我的问题是: 1.我们必须定义两个自定义操作?一个是延迟的,另一个是回滚,回滚必须在延迟之前? 但是我的回滚操作只是想在升级失败时重新启动服务,所以有必要这样做吗?我尝试过这种方法,它不起作用,但它在我刚定义的安装中工作回滚操作,您可以看到如下:( 回滚操作介于InstallInitialize和InstallFinalize之间

1.in InstallExecuteSequence

  <Custom Action="StartAllServicesWhenRollBack" After="InstallInitialize">1</Custom>
  <Custom Action="UninstallMysqlOdbcDriver" After="StartAllServicesWhenRollBack">1</Custom>

2.in Fragment

<CustomAction Id="StartAllServicesWhenRollBack" BinaryKey="StartAllServicesWhenRollBackScript" VBScriptCall="" Execute="rollback" Return="check"/>
<Binary Id="StartAllServicesWhenRollBackScript" SourceFile="startInstall.vbs" />
<CustomAction Id="UninstallMysqlOdbcDriver" BinaryKey="UninstallMysqlOdbcDriverScript" VBScriptCall="" Execute="immediate" Return="check"/>
<Binary Id="UninstallMysqlOdbcDriverScript" SourceFile="UninstallMysqlOdbcDriver.vbs" />

它将在安装中回滚,但在升级时不起作用,另一种方法是:

  <Custom Action="StartAllServicesWhenRollBack" Before="StopAllServicesa">1</Custom>
  <Custom Action="StopAllServicesa" After="InstallInitialize">1</Custom>

  <CustomAction Id="StartAllServicesWhenRollBack" BinaryKey="StartAllServicesWhenRollBackScript" VBScriptCall="" Execute="rollback" Return="check"/>
<Binary Id="StartAllServicesWhenRollBackScript" SourceFile="startInstall.vbs" />
<CustomAction Id="StopAllServicesa" BinaryKey="StopAllServicesaScript" VBScriptCall="" Execute="deferred" Return="check"/>
<Binary Id="StopAllServicesaScript" SourceFile="stopService.vbs" />

此方法在升级时不起作用,所以我对此感到困惑,StopAllServicesa将执行但回滚操作不执行,似乎回滚操作没有写在回滚脚本中,如何在日志中找到回滚脚本吗

1 个答案:

答案 0 :(得分:0)

如果正在安装产品,则会有回滚功能,以便自定义操作可以回滚他们对系统所做的任何更改。实际上并没有&#34;卸载回滚&#34;。当一个产品被卸载并以某种方式失败时,&#34;回滚&#34;只是重新安装产品。在这种情况下,回滚的方式不需要任何特殊的东西。如果RemoveExistingProducts失败,它只需通过重新安装产品撤消卸载。

如果没有看到完整的详细日志,就无法确切地诊断出发生了什么,但是安装了新产品&#34;部分升级失败,然后安装回滚并调用任何所需的回滚CA.它与取消卸载的用户没有什么不同 - Windows只是重新安装产品,并不需要像#34;卸载回滚自定义操作&#34;使它工作。