WiX升级元素在修复时不会执行

时间:2014-12-22 10:58:01

标签: wix

我有一个包含以下代码段的wxs文件:

<Upgrade Id="{FE576A6C-AF60-4569-B81D-1B025F88F9D7}">
    <UpgradeVersion Property="LCGUID" OnlyDetect="yes"
        Minimum="0.0.0" IncludeMinimum="yes"
        Maximum="9.0.0" IncludeMaximum="no" />
</Upgrade>

这将查找另一个已安装的软件(名为LC)并将升级版本guid设置为属性LCGUID。这稍后用于验证是否安装了正确的LC。

这在“安装”或“升级”软件时有效。我可以在日志中看到这一点:

MSI (c) (9C:A8) [02:28:48:422]: PROPERTY CHANGE: Adding LCGUID property. Its value is '{8023DC00-D425-4DE8-808C-C78FAD649A2F}'.

现在,当我尝试进行修复时,我还需要填充此属性,但日志中没有说明LCGUID。

我怀疑修复时不会执行“Upgrade”元素。有人可以验证这一点并提供可能的解决方案吗?

1 个答案:

答案 0 :(得分:3)

如果您查看日志,您应该会看到类似“跳过FindRelatedProducts操作:不在维护模式下运行”的内容,这就是UpgradeCode搜索的内容,因此您的正确之处在于它不会在维护/修复模式下运行。

首次安装升级搜索时,您可以将该属性保存在注册表中,使用WiX“记住属性”模式。它确实意味着您需要两次单独的搜索,在全新安装期间和一次用于维护模式。通常,您将使用另一个属性进行注册表搜索,然后设置一个自定义操作属性集,只需将LCGUID设置为REGISTRYGUID,条件为已安装。