我安装的是1.1版本。我使用 1.2 版本创建了升级。
在这两种产品中我都有 2 个文件:
<Component Win64="yes" Id="cmpFILE1" Guid="*">
<File Id="filFILE1" KeyPath="yes" Source="$(var.BasePathCMP)\Performance.dll" />
</Component>
<Component Win64="yes" Id="cmpFILE2" Guid="*">
<File Id="filFILE2" KeyPath="yes" Source="$(var.BasePathCMP)\LockLib.dll" />
</Component>
在升级过程中,LockLib.dll 被删除且未被替换。
在 1.2 的全新安装中它是存在的。
什么会导致这种行为?
我认为您更改了 MSI(旧版和升级版)中的文件的组件 guid。当RemoveExistingProducts安装即将结束时,升级的行为类似于合并,如有必要,会覆盖文件并增加共享组件guid的引用计数。最后,REP 将删除旧产品并减少组件指南的引用计数。如果该指南不再有客户端,它将被删除。如果“共享”文件的 guid 发生更改,它将不再有客户端并被删除。最后的 REP 的问题是您必须遵循组件共享规则,但如果您在升级开始时对 REP 进行排序,则不需要遵循组件共享规则。
我添加一个示例以供将来参考。
假设第一次安装有 3 个文件 A、B、C 和三个 guid,分别是 1、2 和 3。您的升级有相同的三个文件,但 guid 是 1、2 和 8。当 REP 结束时,升级安装首先是旧产品。 Guid 1 和 2 的引用计数从 1 增加到 2。Guid 3 保持为 1。然后卸载旧产品。指南 1 和 2 的引用计数减至 1,它们仍在使用中,因此附加到组件指南的文件会保留。 Guid 3 下降到零,没有引用计数,因此该组件被删除,但它附加到文件 C,因此即使您刚刚安装了它,C 也会被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)