我已经超越了 WiX 中可用的 Sql Server 自定义操作,因此我采取了大胆的步骤,使用部署工具基础创建自己的操作。我想成为一个好公民,并确保我的支持回滚。但是最好的方法是什么?
我需要支持 SQL Server 2005 及更高版本的所有版本。
在我看来,问题在于 Windows Installer 分两个阶段工作:它完成工作,在执行过程中存储撤消信息。然后,当所有部分都到位时,它要么提交(删除撤消信息)要么回滚。
这意味着标准交易无法完成这项工作。它们必须在我的 Execute 自定义操作中完成,而且我以后没有机会回滚它们。
我考虑过对数据库进行仅复制备份,如果需要,我可以在回滚操作中恢复,但我认为这种方法虽然简单,但也有缺点。例如,我不知道我们的数据库会有多大——所以我不能保证目标机器上会有可用空间来保存备份。此外,备份和恢复可能需要一段时间才能完成,而且我不希望典型安装(不会发生回滚)过慢。
这让我想到了我目前最喜欢的想法:确保分布式事务协调器已启动,然后在进行更改之前初始化分布式事务,然后在适当的自定义操作中提交或回滚它。
看来我可以使用TransactionInterop类的成员来导出一个 cookie,使我能够在不同的自定义操作之间共享事务。
有这种事情经验的人能说一下它是否有可能奏效吗?