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

WiX Installer使用RegistrySearch指定安装目录问题排查

问题根源

你的配置读不到注册表值、安装路径错误是两个核心问题导致的:

  • 32位注册表重定向问题:WiX v3默认的RegistrySearch会以32位进程视角搜索注册表,在64位系统上搜索HKLM\SOFTWARE路径时,会被系统自动重定向到HKLM\SOFTWARE\Wow6432Node路径。你安装的SolidWorks 2022是64位版本,对应注册表项在64位系统的原生注册表路径下,32位搜索根本找不到对应键值,所以SOLIDWORKSDIR属性为空。
  • 目录默认值配置错误:当SOLIDWORKSDIR属性为空时,你给对应Directory节点设置的Name="."会让Windows Installer将该目录默认解析为系统盘根目录(通常是C:\),最终就出现了文件被安装到C:\My Company\SolidWorks Add-In的现象。
修改方案
  1. 给注册表搜索项添加Win64="yes"属性,明确指定搜索64位原生注册表视图,避开Wow64重定向。
  2. 增加兜底校验逻辑:如果注册表搜索失败(也就是用户机器上没装对应版本SolidWorks),弹出提示并终止安装,避免文件被装到错误位置。
  3. 修正目录配置,移除搜索属性对应目录节点上错误的Name="."配置。
修改后的核心配置代码
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="SolidWorks Add-In" Language="1033" Version="1.0.0.0" Manufacturer="My Company" UpgradeCode="073e3b99-1977-4a3e-a4dc-0d61cc6ddbee">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Description="SolidWorks Add-In Installer" Manufacturer="My Company" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes"  CompressionLevel="high" />

        <Feature Id="ProductFeature" Title="Installer" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>

        <Property Id="MsiLogging" Value="v" />
        <!-- 新增Win64="yes"指定搜索64位注册表 -->
        <Property Id="SOLIDWORKSDIR">
            <RegistrySearch Id="SolidWorksRegistry" Type="raw" Root="HKLM" Win64="yes" Key="SOFTWARE\SolidWorks\SOLIDWORKS 2022\Setup" Name="SolidWorks Folder" />
        </Property>

        <!-- 新增校验逻辑:未找到SolidWorks路径时弹出提示终止安装 -->
        <Condition Message="未检测到本机安装SolidWorks 2022,安装即将终止。">
            <![CDATA[Installed OR SOLIDWORKSDIR]]>
        </Condition>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
                <!-- 移除错误的Name="."配置 -->
                <Directory Id="SOLIDWORKSDIR">
                    <Directory Id="My_Company" Name="My Company">
                        <Directory Id="INSTALLFOLDER" Name="SolidWorks Add-In" />
                    </Directory>
                </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
             <!-- 64位安装场景下组件标记Win64属性 -->
             <Component Id="AutofacLibrary" Guid="3124c97d-079d-48fe-bc7c-e594bf49ae4a" Win64="yes">
                 <File Id="AutofacDLL" Name="Autofac.dll" DiskId="1" Source="..\SolidWorksAddIn\bin\Release\Autofac.dll" KeyPath="yes" />
                 <File Id="AutofacPDB" Name="Autofac.pdb" DiskId="1" Source="..\SolidWorksAddIn\bin\Release\Autofac.pdb" />
             </Component>
        </ComponentGroup>
    </Fragment>
</Wix>
额外说明
  • 因为你的安装包是perMachine全局安装范围、面向64位SolidWorks,对应的组件也建议加上Win64="yes"标记,避免被系统重定向安装到32位程序目录。
  • 如果后续需要兼容多个SolidWorks版本,可以追加多个不同版本路径的RegistrySearch,按版本优先级依次搜索赋值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:51:21