WiX MSI 升级不允许安装某些组件

WiX MSI upgrade disallows installation of some components

当我尝试升级我的项目时,我得到了大约八个组件的以下日志:

MSI (c) (24:EC) [11:50:17:422]: Disallowing installation of component: {290E89A8-6BA7-59F2-B350-BE657C2823BC} since the same component with higher versioned keyfile exists

升级的卸载部分似乎删除了所有以前安装的文件,但在升级过程中安装新文件时,似乎不允许安装八个左右 components/files。升级成功,但是这八个文件不存在。我使用以下标准进行升级(顺便说一句,我的产品 ID 是 *):

<Upgrade Id="{16B40AC6-1F80-47CD-9955-BDCC5BB297E4}">
    <UpgradeVersion Minimum="$(var.InstallerVersion)" Property="NEWPRODUCTFOUND" OnlyDetect="yes" IncludeMinimum="no" Language="1033" />
    <UpgradeVersion Minimum="0.0.0" Maximum="$(var.InstallerVersion)" Property="OLDPRODUCTFOUND" OnlyDetect="no" IncludeMinimum="yes" IncludeMaximum="yes" Language="1033" />
</Upgrade>
<InstallExecuteSequence>
...
    <RemoveExistingProducts Before="InstallInitialize" />
...
</InstallExecuteSequence>

我曾尝试使用步骤 described here 来规避此问题,但没有成功。任何人都可以阐明我如何能够在升级时安装我的新文件吗?奇怪的是,如果我通过程序和功能卸载旧版本,然后安装新版本,它会工作并且所有文件都已安装(因此,在不升级时它会工作),但在升级时,它会没有安装我的一些文件。

Edit: 碰巧将 REINSTALLMODE 属性 设置为 amus 将强制它重新安装文件,而不管版本和校验和,它现在可以工作,因为它的默认值是 omus,但我不确定这是否是最好的方法:

<Property Id="REINSTALLMODE" Value="amus" />

这个问题似乎是一个反复出现的问题,类似于:

http://support.microsoft.com/kb/905238

Windows 决定不安装这些文件,因为存在更高版本,但当发现我们正在进行重大升级时,不会重新评估该决定。我认为这个问题已经在 MSI 4.5 中得到修复。

在 CostInitialize 之前执行 RemoveExistingProducts 应该可以解决问题,但是如果您正在使用该功能,您将在升级过程中遇到一些 ICE 错误并丢失功能迁移。