2009-08-19 73 views
8

我可以找到很多关于msi升级的信息。例如。有关小升级,小升级,主要升级,以及它们的使用案例和限制的信息。但是,我无法找到合并模块的升级行为信息,如:合并模块如何升级?

  1. 好像MSM没有指定次要的,小的,或 重大升级任何 方式。那么 的行为方式是?它是否首先卸载旧的 版本,或只更新 文件?
  2. 有没有什么办法可以从 指定哪个版本可以升级 像msi?
  3. 我可以为新版本添加/删除/重命名 组件吗?
  4. 如果MSM的较新版本 已经安装和容器 微星决定安装,将它与 这个旧版本 MSM的覆盖?

回答

7

合并模块可以参与两种升级方案。第一种是安装程序升级时,升级.msm文件。这发生在Visual Studio服务包等提供更新合并模块供您使用的情况下。这可能会产生问题,因为.msm文件没有文件版本(即使它们具有合并模块版本),所以文件版本控制规则不适用。你可能不会问这个案子。

另一种情况是合并模块已合并到将升级的安装程序中。它不再是合并模块,而是其文件和其他记录是消费安装程序的一部分。在这种情况下,已合并到其中的.msi控制升级步骤。这两者相互作用,通知你对前三个问题的回答。如果合并模块的更改不符合次要升级规则,则消费安装程序将无法使用次要升级,并且必须进行重大升级。相应地,如果您想在使用安装程序中使用(或允许)次要升级,则必须注意组件。这可能比在.msi中更难,因为您无法在合并模块内添加新功能。文件版本控制规则将像在所有Windows Installer安装中一样应用;因此对第四个问题的答案是逐个文件确定的,而不是针对整个模块内容的组答案而不是组答案。

+0

很棒的回答。这确实是第二种情况。 Windows安装程序图片越来越清晰... – Dudu 2009-08-21 09:02:24

0

问题: 我相信我需要知道如何在解答的第二个场景中描述版本的合并模块。

现状:

我有所有安装相同的合并模块众多产品。

如果一个产品安装了较新版本的合并模块,我不希望旧版本的其他产品覆盖最新的合并模块。

有人可以描述这是否可能,如果是的话如何?

+0

这真的应该是它自己的独立问题(必要时请参考此文档)。如果合并模块及其更新版本编写得很好,这应该是正常的。较新的文件版本将覆盖较旧的版本,但反之亦然。共享组件代码将正确引用计数,因此即使是最新文件的单个用户也不会删除共享文件。简而言之:在升级此合并模块的设计时,确保遵循组件和文件版本控制规则,理想情况下只更新现有文件。那么一切都应该正常工作。 – 2009-12-24 16:52:45

+1

我很难找到关于这个的详细文档,所以这里是我从实验中证实的:给定:合并模块的2个版本,称它们为MMv1.msm&MMv2.msm;每个.msm包含1个文件MyFile.dll; MMv1.msm有MyFile.dll的v1.0; MMv2.msm有MyFile.dll的v2.0; MMv1.msm由安装程序为应用程序A1使用; MMv2.msm用于应用程序A2。然后,当... 1)App A1被安装,然后A2? MyFile在2.0版完成; 2)A1,然后A2,安装,然后只是A2卸载? MyFile保持在v2.0。 3)安装A2,那么A1? MyFile从v2.0开始并保持在v2.0。 – 2015-10-15 18:46:54