为什么指南 - 回滚操作应该在执行顺序中的安装操作之前出现?

时间:2011-04-08 08:28:42

标签: windows-installer

指南(实际上是作为规则提到)说:

“应该在延迟的自定义操作之前直接插入回滚自定义操作,以便在执行延迟的自定义操作之前将其添加到回滚脚本中。这可确保在您的自定义操作期间安装中止时正确回滚行动“(http://www.installsite.org/pages/en/isnews/200108/index.htm

我有以下执行顺序:

InstallInitialize   - InstallFiles   - MakeConfigChanges   - RollbackConfigChanges   - CommitConfigChanges   - InstallFinalize

在上面的示例中,我已经在其相应的安装操作之后放置了回滚操作 - RollbackConfigChanges。我觉得它仍然会生成正确的安装,回滚和提交脚本。正确的吗?

如果生成正确的脚本而不管InstallInitialize和InstallFinalize之间的操作顺序如何,那么上述指南是什么?在InstallInitialize和InstallFinalize块之间订购操作的建议是什么(如果有的话)?

感谢。

更新 当回滚操作在其安装操作之后出现时,它们不会被调用,因为它们不会写入回滚脚本。我尝试修改msi设置中的序列然后执行它。未调用回滚操作。因此,指南是正确的,上面提到的样本序列不正确,不起作用。

3 个答案:

答案 0 :(得分:2)

请参阅MSI SDK中的“回滚自定义操作”。回滚由单独生成的脚本管理,因此如果回滚自定义操作在自动回滚后显示,则它不会成为脚本的一部分。

答案 1 :(得分:1)

您想阅读:

Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer

它回答了很多你可能还没有想过要问的问题。对于手头的问题,这是因为存在脚本生成阶段和脚本执行阶段。当回滚发生时,它将结束回滚脚本并在某种意义上开始向后移动。如果您的延迟操作是在延迟后计划的,那么由于这种关系,它将永远不会运行您的回滚操作。

答案 2 :(得分:0)

全部取决于您的自定义操作清理代码。如果您的操作返回错误会发生什么?如果离开应清理的数据,则应在CA之前执行回滚操作。否则(最聪明的情况)回滚应该是 你的CA。

如果您的操作尝试复制文件,如果操作失败,文件会发生什么?

因此,回滚操作应删除已在CA中复制的文件。但您的CA无法复制文件 - 无需删除任何内容。

所有安装人员的习惯,先生。 Rob和MSDN并不意味着他们做得很好。注意这个错误。

当它依赖于“取消”用户操作时,它们是正确的。如果您的操作在返回之前成功完成,并且用户与操作执行并行地单击“取消”按钮,则需要回滚该操作。因此,如果您的所有CA都是同步的,并且您在延迟阶段禁用了“取消”按钮,请在> CA之后安排回滚操作

另一种选择 - 在相应的回滚操作中检查延迟操作的成功。这种成功应该在行动结束时加以标记。