升级后文件丢失

时间:2014-05-20 12:39:41

标签: wix wix3.7 wix-extension

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

2 个答案:

答案 0 :(得分:0)

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

  1. 更改RemoveExistingProducts的顺序
  2. 将DLL设置为共享
  3. 我建议选择一个。

    RemoveExistingProducts Element

答案 1 :(得分:0)

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

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

假设第一次安装有3个文件A,B,C和3个指令,分别为1,2和3.您的升级具有相同的三个文件,但guid为1,2和8.当REP结束时升级首先安装在旧产品上。指南1和指令2的引用计数从1增加到2.指导3保持为1.然后卸载旧产品。指南1和指针2被重新计数到1,它们仍在使用中,因此附加到组件指南的文件会保留。 Guid 3降至零,没有引用计数,因此组件被删除,但它附加到文件C,因此即使您刚刚安装它也会删除C.