Wix 工具集 - 无法 create/install 使用比原始 msi 包更少 files/components 的补丁

Wix Toolset - Cannot create/install patch with fewer files/components than the original msi package

我在字段中有几个位置的初始 .msi 相同,具有大约 2000 个文件(多种文件类型)。但是,我将不得不根据需要将补丁发送到少数几个位置,因此补丁应该包含更少的文件(有时只有 1 个文件作为修复)。我无法创建一个补丁 (.msp),只有一个文件或几个我想要 add/update 的文件,但还必须包括所有原始文件集。这可以通过任何方式实现吗?请帮忙!!

我也不想进行重大升级,因为一些原始文件是日志和数据库文件,需要保持完整且无法删除。

当我用简单的文本文件尝试这种情况时,我的 .msi 有 3 个文本文件,而 .msp 只有 1 个我想更新的文本文件,一切都成功了,我可以看到更改。但是当我尝试使用我的实际文件夹时,出现了这个错误:-

MSI (s) (A0:70) [16:17:59:147]: SELMGR: ComponentId '{B826B564-A3C4-45AB-9623-FB0089831140}' 已注册到功能 'ProductFeature',但不存在于组件 table 中。不支持从功能中删除组件! MSI (s) (A0:70) [16:17:59:147]: SELMGR: 不支持从功能中删除组件

它引用的组件是一个 dll。关于 dll,我是不是遗漏了什么?

试图完全理解您的需求,但您似乎正试图将组件删除作为所谓的次要升级的一部分。您要做的不是删除组件,而是保留组件,而是从该组件中删除文件属性。本质上是创建一个空组件,直到您接下来可以进行重大升级。

删除补丁中文件的唯一方法是 "puncture" 组件。您可以通过将组件的 Transitive 传递标记为 true 并在始终计算为 false 的组件上放置一个条件来执行此操作。您仍必须将组件和文件保留在 MSI/MSP 中,但您可以提供一个零字节文件。

当应用次要升级/补丁时,组件将重新评估并自行卸载,因为条件为假。

每当您进行下一次重大升级时,您都可以完全删除该组件。

感谢 David 和 Chris 以及所有其他人抽出时间来讨论这个问题。现在,我将新组件添加为新功能,以便所有现有组件都可以属于同一功能。这为我消除了错误。