在修补程序期间阻止自定义操作运行

时间:2014-03-04 20:19:31

标签: wix windows-installer patch

我正在为一个非常大的包编写一个非常小的补丁,它的唯一目的是更新一个文件并添加四个较小的文件。

使用WiX帮助作为指南我可以生成MSP文件。

然而,一个补丁运行显然它在重新安装模式下运行原始包,包含所有自定义操作以及与之相关的东西,这不是我想要的。

进一步的研究发现了MsiPatchMetadata表的OptimizeCA属性,以及与WiX等效的OptimizeCustomActions,它允许在应用补丁时跳过自定义操作。

这听起来正是我想要的,但不幸的是它没有按预期工作。原始软件包有一堆XML配置文件更改自定义操作,并查看日志,当它到达XmlFile CA时看起来是错误的:

MSI (s) (58!74) [14:53:24:928]: PROPERTY CHANGE: Adding ExecXmlFileRollback property. Its value is (stuff deleted)
MSI (s) (58:74) [14:53:24:928]: Doing action: ExecXmlFileRollback
Action 14:53:24: ExecXmlFileRollback. 
Action start 14:53:24: ExecXmlFileRollback.
MSI (s) (58:74) [14:53:24:928]: Skipping Action: ExecXmlFileRollback. It is being skipped as per the value provided for OptimizeCA in MsiPatchMetadata table of an applicable patch
Action ended 14:53:24: ExecXmlFileRollback. Return value 0.
SchedXmlFile:  Error 0x8007065a: Failed MsiDoAction on deferred action
SchedXmlFile:  Error 0x8007065a: failed to schedule ExecXmlFileRollback for file: (file)
SchedXmlFile:  Error 0x8007065a: failed to begin file change for file: (file)
Action ended 14:53:24: SchedXmlFile. Return value 3.

您可以看到,ExecXmlFileRollback操作正在考虑OptimizeCA属性,因为它正在被跳过,但是当它尝试安排它时会出现问题,这会导致整个安装程序崩溃。< / p>

这是我的WiX补丁创作的相关部分:

<OptimizeCustomActions 
  SkipAssignment="no"
  SkipImmediate="no"
  SkipDeferred="yes">
</OptimizeCustomActions>

我真的很难搞清楚下一步该尝试什么。我发现另一个人在wix-users上遇到与我完全相同的问题,但对查询没有回应。

1 个答案:

答案 0 :(得分:1)

包含“Not PATCH”的条件应阻止CA在修补程序安装期间运行。

或者,如果已安装产品,“未安装”将阻止其运行,因为在修复期间您似乎遇到类似问题。