回滚自定义操作
安装程序在处理安装脚本时,会同时生成一个回滚脚本。 除了回滚脚本之外,安装程序还会保存它在安装期间删除的每个文件的副本。 这些文件保存在隐藏的系统目录中。 安装完成后,会删除回滚脚本和保存的文件。 如果安装失败,安装程序会尝试回滚安装期间所做的更改,并还原计算机的原始状态。
尽管通过在数据库表中插入行来计划系统操作的自定义操作可以通过回滚安装来撤销,但直接更改系统或向其他系统服务发出命令的自定义操作不一定可以通过回滚来撤销。 回滚自定义操作是安装程序仅在进行安装回滚期间执行的一项操作,其目的是撤销对系统做出更改的自定义操作。
回滚自定义操作是一种推迟执行自定义操作,因为它的执行会推迟,只有在运行安装序列期间调用它时才会执行。 它不同于普通的推迟自定义操作,因为它仅在回滚期间执行。 始终必须先执行回滚自定义操作,然后再执行它在操作序列中回滚的推迟自定义操作。 回滚自定义操作还应该处理推迟的自定义操作在执行中途被中断的情况。 例如,用户在执行自定义操作时按下“取消”按钮。
请注意,回滚自定义操作不能以异步方式运行。 请参阅同步和异步自定义操作。
对回滚自定义操作的补充是提交自定义操作。 安装程序在运行安装序列期间执行提交自定义操作,将自定义操作复制到回滚脚本中,但在回滚期间不执行该操作。
请注意,回滚自定义操作可能无法删除提交自定义操作所做的所有更改。 尽管安装程序会将回滚和提交自定义操作写入回滚脚本,但提交自定义操作仅在安装程序成功处理安装脚本之后运行。 提交自定义操作是在回滚脚本中首先运行的操作。 如果提交自定义操作失败,安装程序将启动回滚,但只能回滚那些已写入回滚脚本的操作。 这意味着,根据提交自定义操作,回滚可能无法撤消操作所做的更改。 可以创作自定义操作来忽略返回代码,从而忽略提交自定义操作发生的失败。
当安装程序运行回滚自定义操作时,它设置的唯一一个模式参数是 MSIRUNMODE_ROLLBACK。 有关运行模式参数的说明,请参阅 MsiGetMode。
可以通过将选项标志添加到 CustomAction 表的 Type 字段来指定回滚自定义操作。 有关用于指定回滚自定义操作的选项标志,请参阅自定义操作脚本内执行选项。
禁用回滚后,回滚和提交自定义操作不会运行。 如果包作者需要使用这些类型的自定义操作才能正常完成安装,则他们应在条件中使用 RollbackDisabled 属性,以防止在禁用回滚后继续安装。 有关如何禁用回滚的信息,请参阅回滚安装 (Windows Installer)。