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

WIX Toolset制作的reSLIRP MSI误装至x86目录问题排查

问题:WIX Toolset v4制作的MSI安装到32位目录而非64位目录

问题详情

我使用WIX Toolset为reSLIRP制作MSI安装程序,程序被安装到C:\Program Files (x86)目录,而非预期的C:\Program Files目录。

尝试过的解决方法:

  • 旧版WIX的Wix/Package/@Platform="x64"、Component/@Win64="yes",但当前版本不支持
  • 现代方案设置Component/@Bitness="always64",但无效果

WXS代码

<?xml version="1.0"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
  <Package Compressed="yes" InstallerVersion="500" Manufacturer="HappyRobotsLTD" Name="reSLIRP" Scope="perMachine" UpgradeCode="12345678-ABCD-0001-0001-250131143054" Version="1.1.0.0">
    <StandardDirectory Id="ProgramFiles64Folder">
      <Directory Id="INSTALLFOLDER" Name="reSLIRP">
        <Component Bitness="always64" Id="ProductComponent">
          <File Id="MainExecutable" KeyPath="yes" Source="build\reslirp.exe"/>
        </Component>
        <Component Bitness="always64" Id="msys_intl_8_dll">
          <File Id="msys_intl_8_dll" KeyPath="yes" Source="C:\msys64\usr\bin\msys-intl-8.dll"/>
        </Component>
        <Component Bitness="always64" Id="msys_glib_2_0_0_dll">
          <File Id="msys_glib_2_0_0_dll" KeyPath="yes" Source="C:\msys64\usr\bin\msys-glib-2.0-0.dll"/>
        </Component>
        <Component Bitness="always64" Id="msys_stdc_6_dll">
          <File Id="msys_stdc_6_dll" KeyPath="yes" Source="C:\msys64\usr\bin\msys-stdc++-6.dll"/>
        </Component>
        <Component Bitness="always64" Id="msys_iconv_2_dll">
          <File Id="msys_iconv_2_dll" KeyPath="yes" Source="C:\msys64\usr\bin\msys-iconv-2.dll"/>
        </Component>
        <Component Bitness="always64" Id="msys_gcc_s_seh_1_dll">
          <File Id="msys_gcc_s_seh_1_dll" KeyPath="yes" Source="C:\msys64\usr\bin\msys-gcc_s-seh-1.dll"/>
        </Component>
        <Component Bitness="always64" Id="msys_2_0_dll">
          <File Id="msys_2_0_dll" KeyPath="yes" Source="C:\msys64\usr\bin\msys-2.0.dll"/>
        </Component>
        <Component Bitness="always64" Id="msys_pcre2_8_0_dll">
          <File Id="msys_pcre2_8_0_dll" KeyPath="yes" Source="C:\msys64\usr\bin\msys-pcre2-8-0.dll"/>
        </Component>
        <Component Bitness="always64" Id="msys_slirp_0_dll">
          <File Id="msys_slirp_0_dll" KeyPath="yes" Source="C:\msys64\usr\local\bin\msys-slirp-0.dll"/>
        </Component>
      </Directory>
    </StandardDirectory>
    <Feature Id="reSLIRPFeature">
      <ComponentRef Id="ProductComponent"/>
      <ComponentRef Id="msys_intl_8_dll"/>
      <ComponentRef Id="msys_glib_2_0_0_dll"/>
      <ComponentRef Id="msys_stdc_6_dll"/>
      <ComponentRef Id="msys_iconv_2_dll"/>
      <ComponentRef Id="msys_gcc_s_seh_1_dll"/>
      <ComponentRef Id="msys_2_0_dll"/>
      <ComponentRef Id="msys_pcre2_8_0_dll"/>
      <ComponentRef Id="msys_slirp_0_dll"/>
    </Feature>
  </Package>
</Wix>

程序架构验证

项目通过msys2编译,生成的可执行文件为x86_64架构:

$ file /c/Program\ Files\ \(x86\)/reSLIRP/reslirp.exe
/c/Program Files (x86)/reSLIRP/reslirp.exe: PE32+ executable for MS Windows 5.02 (console), x86-64, 18 sections

解决方案

问题核心是Package元素未指定64位属性。你仅给Component设置了Bitness="always64",但WIX v4中,整个安装包的位数由Package的Bitness属性决定。如果Package未明确指定64位,Windows Installer会默认按32位处理,此时ProgramFiles64Folder会被重定向到C:\Program Files (x86)。

修改步骤:
在Package标签中添加Bitness="always64"属性,修改后的Package标签如下:

<Package Compressed="yes" InstallerVersion="500" Manufacturer="HappyRobotsLTD" Name="reSLIRP" Scope="perMachine" UpgradeCode="12345678-ABCD-0001-0001-250131143054" Version="1.1.0.0" Bitness="always64">

重新编译生成MSI后,程序就会被正确安装到C:\Program Files目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:16:14