【问题标题】:Why the guideline - rollback action should appear before its install action in the execution sequence?为什么指南 - 回滚操作应该出现在执行序列中的安装操作之前?
【发布时间】:2011-04-08 08:28:42
【问题描述】:

指导方针(事实上,它作为一项规则被提及)说:

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

我的执行顺序如下:

安装初始化 - 安装文件 - MakeConfigChanges - RollbackConfigChanges - 提交配置更改 - 安装完成

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

如果无论 InstallInitialize 和 InstallFinalize 之间的操作顺序如何都能生成正确的脚本,那么上述指南是关于什么的?在 InstallInitialize 和 InstallFinalize 块之间排序操作的建议(如果有)是什么?

谢谢。

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

【问题讨论】:

    标签: windows-installer


    【解决方案1】:

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

    【讨论】:

    • 让我困惑的是:安装与其对应的回滚动作没有关联。其次,回滚脚本是什么时候生成的?您能否查看示例(有问题)并告诉我它是否会正确执行?
    • 关联就是顺序。正如您所指出的,文档是正确的,您的提案将不起作用。
    【解决方案2】:

    你想阅读:

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

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

    【讨论】:

    • 我的问题中提到了相同的链接参考。我的印象是回滚脚本是与安装脚本生成一起生成的,并且由于该顺序应该无关紧要。但是,它是在执行安装脚本时生成的,因此顺序很重要。
    【解决方案3】:

    一切都取决于您的自定义操作清理代码。如果您的操作返回错误会发生什么?如果它留下应清理的数据,则回滚操作应在您的 CA 之前进行。否则(最聪明的情况)回滚应该您的 CA 之后。

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

    因此,回滚操作应删除已复制到 CA 中的文件。但您的 CA 未能复制文件 - 没有可删除的内容。

    所有安装程序制造商的习惯,先生。 Rob 和 MSDN 并不意味着他们把事情做好。注意错误。

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

    另一种选择 - 是在相应的回滚操作中检查您的延迟操作是否成功。这种成功应该在行动结束时被标记出来。

    【讨论】:

    • 注意:您可以在执行长时间运行的延迟操作时禁用“取消”按钮。在开始之前禁用它,并在函数返回时启用。此处的代码示例:link.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多