【问题标题】:Wix rollback custom action not work in upgrade cancelWix 回滚自定义操作在升级取消中不起作用
【发布时间】:2016-11-14 05:38:50
【问题描述】:

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

1.in InstallExecuteSequence

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

2.在片段中

<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 将执行但回滚操作不执行,回滚操作似乎没有写在回滚脚本中,我如何在日志中找到回滚脚本?

【问题讨论】:

  • 您可能需要澄清这个问题。主要升级是安装和卸载。你还没有说你的升级计划在哪里。您还没有说明升级失败发生在哪里,因为升级安装本身可能会在它在 RemoveExistingProducts 操作中删除旧产品之前失败,或者旧产品的卸载可能会失败并重新安装并回滚升级。回滚脚本不在日志中,但整个升级的完整详细日志无论如何都会包含信息,因为它是脚本操作的日志。
  • OK,THX,这是一次重大升级,因为重大升级会卸载旧产品,所以我的回滚操作应该在新版本安装中起作用,对吗?这意味着重大升级有两个阶段,如果我在卸载旧版本阶段单击取消按钮,我的回滚操作不起作用,因为旧产品没有回滚操作,但如果我在安装新版本阶段取消,我的回滚操作将起作用,所以这是我的测试结果,所以我说的对吗?这是我的理解..我不知道对错..
  • 你还没有说你的主要升级在哪里排序,这会有所不同。此外,主要升级都发生在单个进度条中(假设您正在进行正常升级)所以您确定您知道升级的哪个阶段被取消?
  • 我的MajorUpgrade Schedule是在InstallInitialize之后,安装升级失败,在RemoveExistingProducts之后,所以可能我误解了majorupgrade,我一直认为它有两个阶段,它会先卸载产品并安装新产品,但我忽略了顺序,这意味着我的回滚操作将在 RemoveExistingProducts 之后生效,并且在测试它工作之后,为什么我之前有问题是由我的搜索结果引起的,它总是说回滚操作应该与延迟操作相结合,实际上他们可以单独工作,谢谢你的帮助。如果我说错了,请告诉我THX
  • @PhilDW 你能回答我的下一个问题吗?我也对此感到困惑can i add rollback action in MajorUpgrade uninstall stage

标签: wix windows-installer wix3.8


【解决方案1】:

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

如果没有看到完整的详细日志,就不可能准确诊断发生了什么,但是升级的“安装新产品”部分失败,然后安装回滚并调用任何所需的回滚 CA。这与用户取消卸载没有什么不同——Windows 只是重新安装产品,不需要“卸载回滚自定义操作”之类的东西来使其工作。

【讨论】:

  • 再次THX,所以不需要添加回滚操作,因为产品会重新安装,我应该找出服务无法启动的原因,我也想在我的日志中确认回滚操作都是属于新品吗?在您解释之前,我认为部分回滚操作属于卸载阶段,除此之外,当我将 MajorUpgrade Schedule 更改为 afterInstallExecute 时,我的重启服务回滚操作起作用,它将首先安装新产品并在 InstallFinalize 之后卸载,所以如果发生错误在InstallFinalize之前,它会重新安装旧产品吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-03
  • 2012-03-21
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多