我正在为一个非常大的包编写一个非常小的补丁,它的唯一目的是更新一个文件并添加四个较小的文件。
使用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上遇到与我完全相同的问题,但对查询没有回应。
答案 0 :(得分:1)
包含“Not PATCH”的条件应阻止CA在修补程序安装期间运行。
或者,如果已安装产品,“未安装”将阻止其运行,因为在修复期间您似乎遇到类似问题。