维克斯。取消安装时回滚自定义操作

时间:2012-09-22 11:05:12

标签: wix installation custom-action rollback

我有自定义操作

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" />

<InstallExecuteSequence>
      <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom>
</InstallExecuteSequence>

我的自定义操作可以备份和解析数据库。取消安装时我需要做回滚(drop database)。 我做了:

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" />
<CustomAction Id="myActionRollbackId" BinaryKey="myActionRollback" DllEntry="MySimpleAction" Execute="rollback" Return="check" />

<InstallExecuteSequence>
      <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom>
      <Custom Action="myActionRollbackId" Before="myActionId">CHECKBOXCOPYPROP=1</Custom>
</InstallExecuteSequence>

但我遇到了错误。

如果我喜欢这样:

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" />
<CustomAction Id="myActionRollbackId" BinaryKey="myActionRollback" DllEntry="MySimpleAction" Execute="immediate" Return="check" />

<InstallExecuteSequence>
      <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom>
      <Custom Action="myActionRollbackId" After="myActionId">CHECKBOXCOPYPROP=1</Custom>
</InstallExecuteSequence>

我的自定义操作myActionRollbackId有效。

取消安装时如何运行rolback? 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

应该推迟在安装时运行并对数据库执行某些操作的自定义操作(Execute='deferred')。其相应的回滚操作应为Execute='rollback'。在计划这些自定义操作时,应首先执行回滚操作。

另外,请确保正确设置条件。

答案 1 :(得分:1)

安装总是在事务中完成。当你启动安装程序时,它首先创建一个名为安装脚本的东西,就像安装时它将做的一样。 当我们将一些自定义操作设置为 Execute =“immediate”时,会立即执行,但当我们将操作设置为 Execute =“deferred”时,会在安装中添加脚本,因此回滚变得容易。 现在需要注意的一点是,我们可以在执行=“立即”模式下访问会话,但我们无法以执行=“延迟”模式访问会话。 如果我们尝试访问会话,它将给出错误,在这种情况下可能是您错误的原因......