Wix工具集-无法使用比原始msi包更少的文件/组件创建/安装修补程序

Wix工具集-无法使用比原始msi包更少的文件/组件创建/安装修补程序,wix,windows-installer,wix3,msi-patch,Wix,Windows Installer,Wix3,Msi Patch,我在字段中有几个位置的初始.msi是相同的,大约有2000个文件(多种文件类型)。但是,我必须根据需要将修补程序发送到少数位置,因此修补程序应包含较少的文件(有时仅1个文件作为修复)。我无法创建一个补丁(.msp),其中只有一个或几个文件需要添加/更新,但必须包含所有原始文件集。这可以通过任何方式实现吗?请帮忙 另外,我不想做重大升级,因为一些原始文件是日志和数据库文件,需要保持完整,不能删除 当我用简单的文本文件尝试这个场景时,我的.msi有3个文本文件,.msp只有1个我想要更新的文本文件,

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

另外,我不想做重大升级,因为一些原始文件是日志和数据库文件,需要保持完整,不能删除

当我用简单的文本文件尝试这个场景时,我的.msi有3个文本文件,.msp只有1个我想要更新的文本文件,一切都成功了,我可以看到更改。但当我尝试使用我的实际文件夹时,我遇到了以下错误:-

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


它引用的组件是一个dll。谈到DLL,我是否遗漏了什么?

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

删除补丁中的文件的唯一方法是“刺穿”组件。您可以通过将组件的可传递性标记为true,并在组件上设置一个总是计算为false的条件来实现这一点。您仍然必须将组件和文件保留在MSI/MSP中,但可以提供零字节文件

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


无论何时进行下一次主要升级,您都可以完全删除该组件。

感谢David&Chris和所有其他人为此花费的时间。现在,我已经添加了新组件作为新功能,以便所有现有组件都可以属于同一功能。这为我消除了错误

现在没有时间正确回答,但请看:。还有几个:,,。这将违反组件规则,我认为它不起作用,但如果没有进一步的测试,就不确定了。我上面的回答是我很长一段时间以来一直知道的方法。删除该组件违反了小升级。删除附加到组件的文件/资源是解决方法。做了很多次。我很确定这会与“不要创建与所有以前版本的组件不兼容的组件版本”相冲突。我还记得Windows Installer团队曾经有一个博客(现在几乎无法访问)他们谈论了当你更改或删除主键时发生的不好的事情。他们的例子是注册表表。你可能还记得那篇文章。这是他们将Installshield编码为ISHNMET(工业实力家喻户晓的MSI编辑工具)的地方。我找到了它。读最后一段。通过从文件表中删除一行,可以更改主键。你可能会很幸运,但它没有得到微软的支持。在这种情况下,穿刺组件模式是我所知道的删除文件的最安全的方法。这是基于20年的个人微星经验。