我有一个安装程序,似乎在安装时似乎没有遵循MSI组件规则。这是场景:

操作系统:Windows 7 x64

产品a将连接到与guid“123abc”的组件连接到c:\ program files \ common files \ foo中的一组文件。该组件具有以下文件:
foo.dll,版本1.0.0.0,(keypath)
foo.sys,1.0.0.0版
foo.inf,没有版本
foo.cat,没有版本

产品b将与同一组件GUID“123ABC”的文件安装相同的文件,进入同一路径C:\ Program Files \常见文件\ foo。该组件具有以下文件:
foo.dll,版本1.0.0.1,(keypath)
foo.sys,1.0.0.0版
foo.inf,没有版本
foo.cat,没有版本

产品A首先安装,产品B不执行产品A的升级,它们只共享包含组件“123ABC”的公共MSM。我的期望是,当安装产品B时,MSI将比较Foo.dll的Keypath版本,并确定产品B的Foo.dll是较新的。然后,与组件“123abc”关联的所有四个文件都将覆盖产品A安装的磁盘上的现有文件。这不是发生:(相反,这是结果文件集:
C:\ Program Files \常见文件\ foo




foo.dll,1.0.0.1版(来自产品b)
foo.sys,1.0.0.0版(来自产品a)
foo.inf,没有版本(来自产品a)
foo.cat,没有版本(来自产品b)

仅覆盖DLL和CAT文件。从MSI日志文件中,我可以看到以下内容:

MSI (s) (4C:F0) [17:29:24:227]: File: C:\Program Files\Common Files\Foo\foo.dll;    Overwrite;  Won't patch;    Existing file is a lower version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.sys;    Won't Overwrite;    Won't patch;    Existing file is of an equal version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.inf;    Won't Overwrite;    Won't patch;    Existing file is unversioned and unmodified - hash matches source file
MSI (s) (4C:F0) [17:29:24:335]: File: C:\Program Files\Common Files\Foo\foo.cat;    Overwrite;  Won't patch;    Existing file is unversioned and unmodified - hash doesn't match source file
.

我认为MSI组件根据要安装的键入是否安装键入键安装所有关联的文件。什么可能导致与相同组件相关联的每个文件进行单独进行比较?

有帮助吗?

解决方案

keypath状态确定是否会采取组件。组件中的资源然后按照其规则:例如,文件遵循文件版本传输规则

其他提示

假设每个产品使用默认成本计算规则(OMUS)包含共享组件的合并模块应该有效。FWIW,您可能需要考虑制作消耗此合并模块的MSI,然后将其添加到两个产品的引导器。补丁维修可以以这种方式清洁。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top