You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WiX Bootstrapper中DetectCondition判断.NET版本始终返回False问题

解决WiX 3.11中.NET 6依赖检测失效的问题

核心问题分析

你遇到的DetectCondition始终返回False的问题,根源在于两点:

  • util:RegistrySearch默认返回字符串类型,无法直接用于版本比较
  • 未明确指定注册表搜索的64位上下文,可能导致32位安装程序找不到x64注册表项

修复步骤

  1. 修正RegistrySearch配置
    给util:RegistrySearch添加Type="version",将读取到的注册表值转为版本类型;同时添加Win64="yes"确保搜索x64注册表分支:

    <util:RegistrySearch Variable="DOT_NET_VER"
                         Id="DotNetVerFind"
                         Root="HKLM"
                         Key="SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost"
                         Value="Version"
                         Result="value"
                         Type="version"
                         Win64="yes" />
    
  2. 验证DetectCondition逻辑
    变量转为版本类型后,原比较语法即可正常工作:

    DetectCondition="DOT_NET_VER &gt;= v6.0.3"
    

    该条件表示已满足版本要求时跳过安装,完全匹配你的需求。

  3. 排查变量未定义的情况
    若修改后仍无效,可通过WiX日志排查:

    • 生成安装包时添加参数:-dWixBundleLog=install.log
    • 查看日志中是否有DOT_NET_VER变量的赋值记录,确认注册表项是否被正确读取

修改后的完整代码片段

<Fragment>
    <!-- Detect the version of .NET  -->
    <!-- Check the registry and compare it to the version in the PackageGroup below -->
    <util:RegistrySearch Variable="DOT_NET_VER"
                         Id="DotNetVerFind"
                         Root="HKLM"
                         Key="SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost"
                         Value="Version"
                         Result="value"
                         Type="version"
                         Win64="yes" />


    <PackageGroup Id="Net6">
    <!-- Install .NET 6.0 -->

    <ExePackage Id="Netfx60"
                DisplayName="Microsoft .NET 6.0 Desktop Runtime (v6.0.3)"
                Cache="yes" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/norestart /quiet"
                SourceFile="Prerequisites\windowsdesktop-runtime-6.0.3-win-x64.exe"
                DetectCondition="DOT_NET_VER &gt;= v6.0.3" bal:PrereqSupportPackage="yes">
      <ExitCode Value="0" Behavior="success"/>
      <ExitCode Behavior="scheduleReboot"/>
    </ExePackage>
  </PackageGroup>
</Fragment>

内容的提问来源于stack exchange,提问作者Josh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:20:28