【发布时间】: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