【问题标题】:File missing after upgrade升级后文件丢失
【发布时间】:2015-11-17 18:24:18
【问题描述】:

我安装了 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 的全新安装中,它存在。 什么会导致这种行为?

【问题讨论】:

    标签: wix wix3.7 wix-extension


    【解决方案1】:

    发生这种情况的原因之一是安装包执行升级后正在执行操作 RemoveExistingProducts。在这种情况下,MSI 检测到该文件与以前的版本相同,然后将其删除。你可以:

    1. RemoveExistingProducts 的更改顺序
    2. 将 DLL 设置为共享

    我推荐选项一。

    RemoveExistingProducts Element

    【讨论】:

      【解决方案2】:

      我认为您更改了 MSI、旧版和升级版中的文件的组件 guid。当 RemoveExistingProducts 接近安装结束时,升级的行为类似于合并,必要时覆盖文件并增加共享组件 guid 的引用计数。最后,REP 正在删除旧产品并减少组件 guid 的引用计数。如果该 guid 没有更多客户端,它将被删除。如果“共享”文件的 guid 发生更改,它将不再有客户端并被删除。最后关于 REP 的事情是您必须遵循组件共享规则,但如果您在升级开始时对 REP 进行排序,则不需要。

      我正在添加一个示例以供将来参考。

      假设第一次安装有 3 个文件 A、B、C 和三个 guid,即 1、2 和 3。您的升级具有相同的三个文件,但 guid 是 1、2 和 8。当 REP 位于末尾时升级首先安装在旧产品上。 Guid 1 和 2 的引用计数从 1 增加到 2。Guid 3 保持在 1。然后卸载旧产品。 Guid 1 和 2 的 ref 倒计时为 1,它们仍在使用中,因此附加到组件 guid 的文件仍然存在。 Guid 3 降为零,没有引用计数,因此该组件被删除,但它附加到文件 C,因此即使您刚刚安装它,C 也会被删除。

      【讨论】:

        猜你喜欢
        • 2017-01-14
        • 2012-11-13
        • 1970-01-01
        • 2021-10-18
        • 2019-05-05
        • 2017-02-07
        • 1970-01-01
        • 2021-03-09
        相关资源
        最近更新 更多