我不知道为什么回滚操作在升级过程中不起作用,但它在安装过程中工作,我已经尝试了几乎所有我在谷歌找到的方法,我真的希望我能在这里找到答案,所以我的问题是: 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将执行但回滚操作不执行,似乎回滚操作没有写在回滚脚本中,如何在日志中找到回滚脚本吗
答案 0 :(得分:0)
如果正在安装产品,则会有回滚功能,以便自定义操作可以回滚他们对系统所做的任何更改。实际上并没有&#34;卸载回滚&#34;。当一个产品被卸载并以某种方式失败时,&#34;回滚&#34;只是重新安装产品。在这种情况下,回滚的方式不需要任何特殊的东西。如果RemoveExistingProducts失败,它只需通过重新安装产品撤消卸载。
如果没有看到完整的详细日志,就无法确切地诊断出发生了什么,但是安装了新产品&#34;部分升级失败,然后安装回滚并调用任何所需的回滚CA.它与取消卸载的用户没有什么不同 - Windows只是重新安装产品,并不需要像#34;卸载回滚自定义操作&#34;使它工作。