【问题标题】:WIX - RegistrySearch returns wrong InstalllocationWIX - RegistrySearch 返回错误的安装位置
【发布时间】:2010-09-01 09:14:44
【问题描述】:

我的 WIX 安装程序将检查以前安装的软件版本。如果有较旧的安装,则应将其安装在同一路径中。我正在使用 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>


当我的软件已经安装了另一个版本时,我的检查工作正常。
如果我的软件之前没有安装,检查也可以正常工作,但有一个例外:当安装了另一个应用程序时,它在 中写入了一个没有子节点 (GUID) 的条目(名称为 installLocation) >HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 检查返回此应用程序的 installLocation

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

【问题讨论】:

    标签: search wix registry


    【解决方案1】:

    这是因为如果没有找到 ANYVERSION 将为空,然后路径将被评估为 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多