WIX - RegistrySearch返回错误的Installlocation

时间:2010-09-01 09:14:45

标签: search wix registry

My WIX-installer应检查以前安装的软件版本。如果安装较旧,则应安装在同一路径中。我正在使用RegistrySearch执行此检查。

<Property Id="TARGETDIR">
    <RegistrySearch Id="InstallLocation" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[ANYVERSION]" Name="InstallLocation" Type="directory" Win64="no" />
</Property>


其中[ANYVERSION]在

中定义
<Upgrade Id="MyGUID">
    <UpgradeVersion Property="OLDVERSION" IncludeMinimum="yes" IncludeMaximum="no" Maximum="$(var.VERSION)" Minimum="0.0.0.0" OnlyDetect="no" />
    <UpgradeVersion Property="NEWVERSION" IncludeMinimum="no" Minimum="$(var.VERSION)" Maximum="99.99.99.99" IncludeMaximum="no" OnlyDetect="yes" />
    <UpgradeVersion Property="EQUALVERSION" IncludeMinimum="yes" Minimum="$(var.VERSION)" Maximum="$(var.VERSION)" IncludeMaximum="yes" OnlyDetect="yes" />
    <UpgradeVersion Property="ANYVERSION" IncludeMinimum="yes" Minimum="0.0.0.0" Maximum="99.99.99.99" IncludeMaximum="yes" OnlyDetect="yes" />
</Upgrade>


当我的软件已经安装了另一个版本时,我的检查工作正常 如果没有早期安装我的软件,检查也会起作用,但有一个例外:当安装了另一个应用程序时,在 installLocation ) > HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall 检查将返回此应用程序的 installLocation

我的支票有什么问题?
为什么RegistrySearch返回没有子节点的条目的installLocation?
是否有可能使用registrySearch工作,或者我是否需要编写自己的CustomAction?

1 个答案:

答案 0 :(得分:1)

这是因为如果找不到任何内容,ANYVERSION将为空,然后路径将被评估为HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall。

一个解决方案(虽然不太优雅)是在另一个属性中捕获注册表搜索,并且只设置应该包含安装目录的属性(TARGETDIR可能不是正确的选择)如果定义了ANYVERSION,则通过属性设置自定义操作。