Installation 将合并模块添加到Wix项目会导致升级失败

Installation 将合并模块添加到Wix项目会导致升级失败,installation,wix,windows-installer,wix3.6,merge-module,Installation,Wix,Windows Installer,Wix3.6,Merge Module,因此,我有一个使用WiX编写的产品安装程序,它在合并“Microsoft_VC100_CRT_x86.msm”合并模块后无法正确升级。旧产品在安装过程中不会被移除。如果从项目中删除合并模块,则旧版本的删除将按原样进行 合并模块仅包含在目录节点下: <Directory Id="ProgramFilesFolder"> <Merge Id="VC10_CRT_MergeId1" Language="0" SourceFile="c:\\Program Files (x86)\

因此,我有一个使用WiX编写的产品安装程序,它在合并“Microsoft_VC100_CRT_x86.msm”合并模块后无法正确升级。旧产品在安装过程中不会被移除。如果从项目中删除合并模块,则旧版本的删除将按原样进行

合并模块仅包含在目录节点下:

<Directory Id="ProgramFilesFolder">
  <Merge Id="VC10_CRT_MergeId1" Language="0" SourceFile="c:\\Program Files (x86)\\Common Files\\Merge Modules\\Microsoft_VC100_CRT_x86.msm" DiskId="1" />
... other stuff
</Directory>
在WiX构建日志中,我得到了以下信息(但从内存来看,这对于VC运行时msms来说是正常的?)

msi中的InstallExecuteSequence如下所示:


如果删除了合并模块(由于安装程序中的文件已更新,需要将其包括在内),则升级将按预期进行。这是合并模块stuff/WiX/Windows安装程序中的一个错误,还是我做错了什么?

升级时没有收到任何错误消息?它通过了,但你留下了两个添加/删除条目和一个混乱的文件系统?听起来你的两个版本不共享相同的升级代码

如果您试图执行删除操作,则不会触发RemoveExistingProducts。应该更新文件,但您将保留一个添加/删除条目

如果您正在尝试执行将触发RemoveExistingProducts的主要升级,但需要正确设置

另外,作为提示,不要使用合并模块。由于Windows Installer组件规则的工作方式,在进行小升级时,您无法删除合并模块添加的组件。您需要引入一个主要的升级。(或者手动将旧合并模块中的所有组件代码添加到您的项目中。这并不有趣。)根据您所有的东西的设置方式,强制进行重大升级可能会是一个很大的麻烦


如果您添加合并模块,然后需要删除它,则会遇到这种情况。或者,如果您想用VS 2012模块替换VS 2010模块。微软甚至一度打破了服务包之间的组件规则。通过在产品安装期间或之前运行vcredit*.exes安装它们要容易得多。

您发现问题了吗?检查要添加的合并模块的版本是否比要安装的系统上已有的版本旧。在这种情况下,MSI将删除VC++文件,但不会因为新文件较旧而将其放下

编辑:我找到了解决你问题的方法!! 您应该使用: 在安装完成后删除现有产品

参考:


我也遇到了同样的问题,并对此进行了修改。

您能否从详细的日志文件中提供详细信息,以说明到底出了什么问题。我已更新了我的问题,以包括日志中唯一相关的内容。请注意,安装程序实际上并没有失败,但没有删除旧版本。您能否在e开头一段什么不能“按应有的方式升级?”"? 我很困惑你到底遇到了什么问题。好吧,很抱歉不清楚,我已经更新了开头的段落。问题很简单,当合并模块添加到项目中时,旧版本没有被卸载。这是使用Burn安装redist包而不是使用合并模块的一个很好的理由。升级代码是正确的,在不添加合并模块的情况下,RemoveExistingProducts工作正常,升级成功。唯一改变的是添加了合并模块。那么您正在进行重大升级?对于带合并模块和不带合并模块的升级,FindRelatedProducts的详细日志记录是什么样子的?UI和执行序列中可能都有FindRelatedProducts。您是否没有更改其中一个v2软件包的产品代码?回顾一下这篇文章,看看是否有什么东西突然出现在你面前。这些是一些想法。
<Feature Id="MainFeature" Title="Core Files" Level="1">
  <MergeRef Id="VC10_CRT_MergeId1" />
  ... other stuff
</Feature>
<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallValidate'/>
</InstallExecuteSequence>
MSI (s) (AC:44) [19:48:22:300]: Doing action: RemoveExistingProducts
MSI (s) (AC:44) [19:48:22:300]: Note: 1: 2205 2:  3: ActionText 
Action start 19:48:22: RemoveExistingProducts.
MSI (s) (AC:44) [19:48:22:300]: Note: 1: 2205 2:  3: Error 
MSI (s) (AC:44) [19:48:22:300]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 22 
MSI (s) (AC:44) [19:48:22:301]: Note: 1: 2205 2:  3: Error 
MSI (s) (AC:44) [19:48:22:301]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 23 
MSI (s) (AC:44) [19:48:22:301]: Note: 1: 2205 2:  3: Error 
MSI (s) (AC:44) [19:48:22:301]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 16 
MSI (s) (AC:44) [19:48:22:301]: Note: 1: 2205 2:  3: Error 
MSI (s) (AC:44) [19:48:22:301]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 21 
Action ended 19:48:22: RemoveExistingProducts. Return value 1.
1>light.exe(0,0): warning LGHT1076: ICE82: This action SystemFolder_x86_VC.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 has duplicate sequence number 1 in the table InstallExecuteSequence
1>light.exe(0,0): warning LGHT1076: ICE82: This action SystemFolder_x86_VC.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 has duplicate sequence number 1 in the table InstallUISequence
1>light.exe(0,0): warning LGHT1076: ICE82: This action SystemFolder_x86_VC.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 has duplicate sequence number 3 in the table AdminExecuteSequence
1>light.exe(0,0): warning LGHT1076: ICE82: This action SystemFolder_x86_VC.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 has duplicate sequence number 3 in the table AdminUISequence
1>light.exe(0,0): warning LGHT1076: ICE82: This action SystemFolder_x86_VC.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 has duplicate sequence number 3 in the table AdvtExecuteSequence