2010-02-24 78 views
1

这已经是一个普遍的需求但是我发现几乎没有任何在网络上对它的引用...维克斯和共享,版本控制组件

我已经得到了有三套成分的产品,一个安装在服务器,一个在Web头上,另一个在开发人员的机器上。所有三套可以安装在一台机器上,并且应该和平共处。

正如我昨天所做的那样,每个组件都安装到了不同的地方,并且工作正常,但这只是暂时的,因为应该共享某些文件,gac'd程序集和注册表设置。现在我已经从共享组件中创建了一个合并模块,并且这种新的合并模块方案在理想条件下的安装过程中工作正常,并且我已经对单个msi进行了重大升级。

问题是在msi安装过程中,当安装msi中的合并模块版本低于已安装版本(不同msi)的版本时 - 新版本被旧版本覆盖!此外,在三个msis中的任何一个的卸载例程之后,共享的东西即使被其他安装的组件仍在使用中也被移除。

大部分我明白为什么我会得到这种行为,但我不明白我应该如何配置我的安装程序,以便这些组件可以共享,而不必为共享组件分别安装。另外,我不想要一个大的安装者 - 这不会很好地扩展。

我想要的是这三个安装程序包含合并模块中组件的最新版本在构建时可用。在安装时,如果安装了较新版本的共享组件,请勿覆盖它们。在卸载(和升级)时,应该跟踪的引用计数将决定是否应删除共享项目。

如果我只是缺少一些东西,下面是合并文件的重要部分:我的合并模块的版本号(“wxy”中的y)随着每个版本增加,包ID保持不变,每个组件有Shared="yes"(尽管我已经尝试过但没有这个)。

我已经开始在注册表中存储各种版本号,并且我认为只有当注册表中的版本号缺失或更低时,才可以有条件地安装合并模块功能。但正如文档所述,条件参数无法正确评估w.x.y.z。文档然后建议AppSearch,但AppSearch RegistrySearch只能检查是否存在,而不是版本号比较。显然FileSearch可以,但每个版本不会增加汇编文件版本号。

我已经读过MergeModules有很多问题 - 也许这些是他们 - 但wixlib似乎也没有提供任何解决这些问题的方法。

那么什么是正确的方式来做合并模块版本?我发现一本书在亚马逊上有一个名为“合并模块版本控制”的TOC条目,但书已绝版。 :-P

+0

我建议跨张贴就此问题向威克斯用户邮件列表。 – saschabeaumont 2010-02-24 21:59:31

+0

@JasonKleban你还记得有没有找到解决办法?我有这个相同的问题,似乎无法找到任何好的信息。 – tjernigan 2017-08-02 21:05:18

回答

1

它在我看来,我们想要的这种行为 - 总是有安装的共享组件的最佳版本 - 仅支持从MSI 4.5开始。所以也许这不是WiX本身的问题,但我对WiX几乎一无所知。

我们希望在共享组件的组件表中设置属性msidbComponentAttributesShared(0x0800)。也许你可以用Orca来检查你的MSM。

我觉得这个博客帖子中提到一些事情(但它可能不会有很大的帮助你在这里): http://blogs.msdn.com/windows_installer_team/archive/2008/03/29/windows-installer-4-5-servicing-enhancements-shared-components-and-patch-uninstall.aspx

+0

好想法,但我不知道如何在WiX中应用此功能。 +1 – 2010-04-11 20:54:37