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

如何根据Windows操作系统位数动态设置RegistrySearch元素的Win64属性?

动态设置RegistrySearch的Win64属性(基于系统位数)

好问题!在WiX Burn中要根据操作系统位数自动切换RegistrySearch的Win64属性值,确实有两种实用的方案,完美适配你需要检测VSTO Runtime的场景:

方案1:用Condition区分两个RegistrySearch元素

这是最灵活的运行时判断方案,适合单安装包同时支持32位和64位系统的场景。核心思路是创建两个RegistrySearch,分别对应32位和64位系统的注册表路径,通过Condition绑定系统位数变量VersionNT64来控制执行哪个搜索。

VersionNT64是Burn的内置变量:

  • 64位系统中,该变量存在(值为系统版本号,比如601代表Windows 7)
  • 32位系统中,该变量不存在

具体代码示例:

<!-- 64位系统:搜索WOW6432Node下的VSTO注册表路径 -->
<util:RegistrySearch 
  Id="VSTORuntime_x64" 
  Root="HKLM" 
  Key="SOFTWARE\WOW6432Node\Microsoft\VSTO Runtime Setup\v4R\" 
  Value="VSTORFeature_CLR40" 
  Variable="VSTORFeature" 
  Win64="yes"
  Condition="VersionNT64" />

<!-- 32位系统:直接搜索SOFTWARE下的VSTO注册表路径 -->
<util:RegistrySearch 
  Id="VSTORuntime_x86" 
  Root="HKLM" 
  Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\" 
  Value="VSTORFeature_CLR40" 
  Variable="VSTORFeature" 
  Win64="no"
  Condition="NOT VersionNT64" />

Burn会在运行时自动判断系统位数,执行符合条件的RegistrySearch,最终VSTORFeature变量会得到正确的注册表值。

方案2:编译时用预处理器变量指定Win64值

如果你是分平台编译安装包(比如单独编译32位和64位版本),可以用WiX的预处理器变量$(var.Platform)来静态设置Win64属性:

<util:RegistrySearch 
  Id="VSTORuntime" 
  Root="HKLM" 
  Key="$(var.Platform) = x64 ? 'SOFTWARE\WOW6432Node\Microsoft\VSTO Runtime Setup\v4R\' : 'SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\'" 
  Value="VSTORFeature_CLR40" 
  Variable="VSTORFeature" 
  Win64="$(var.Platform) = x64 ? 'yes' : 'no'" />

编译时只要指定Platform=x64或x86,WiX预处理器会自动替换对应的路径和Win64值。不过这种方案灵活性不如第一种,适合不需要单包跨平台的场景。

补充说明

注意Win64="yes"的作用:因为Burn默认是32位进程,当在64位系统中设置Win64="yes"时,它会主动访问64位系统的32位注册表分支(也就是WOW6432Node),正好匹配VSTO Runtime的安装路径;而32位系统中Win64="no"则直接访问常规注册表路径,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:47:47