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

Wix 3.14是否支持ARM64及ARM64自定义操作?构建异常求助

Wix 3.14 ARM64自定义动作DLL生成32位问题解决

先明确Wix 3.14的ARM64支持现状

Wix 3.14后期版本(如3.14.1及以后)确实支持ARM64格式MSI打包(所以Orca能识别为Arm64),但原生ARM64自定义动作(CA)的工具链支持不完善——默认的Wix.CA.targets未适配ARM64编译参数,且官方提供的Microsoft.Deployment.WindowsInstaller库可能没有ARM64版本,导致编译时自动回退到x86。

解决方法

方法1:强制ARM64编译参数+替换WiX CA依赖

  1. 补充ARM64项目配置,确保编译器明确指向ARM64目标:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
  <!-- 保留原有配置 -->
  <OutputPath>$(OutDir)</OutputPath>
  <DefineConstants>TRACE;ARM64</DefineConstants>
  <Optimize>true</Optimize>
  <DebugType>pdbonly</DebugType>
  <PlatformTarget>ARM64</PlatformTarget>
  <LangVersion>7.3</LangVersion>
  <ErrorReport>prompt</ErrorReport>
  <Prefer32Bit>false</Prefer32Bit>
  <!-- 指定Roslyn编译器路径,确保支持ARM64编译 -->
  <CscToolPath>$(MSBuildProgramFiles32)\dotnet\sdk\$(DotNetSdkVersion)\Roslyn\bincore</CscToolPath>
  <CscToolExe>csc.dll</CscToolExe>
</PropertyGroup>
  1. 替换Microsoft.Deployment.WindowsInstaller引用:
    • 从WiX 4.x安装目录提取ARM64版本的Microsoft.Deployment.WindowsInstaller.dll,或自行编译WiX 3.x的CA项目为ARM64架构。
    • 将项目中的引用改为本地ARM64版本,确保<Private>True</Private>配置保留。

方法2:修改Wix.CA.targets适配ARM64

找到WiX安装目录下的Wix.CA.targets(通常路径为C:\Program Files (x86)\Microsoft\WiX\v3.x\),添加ARM64平台支持:

<!-- 在文件开头添加ARM64平台配置 -->
<PropertyGroup Condition="'$(Platform)' == 'ARM64'">
  <WixCATargetPlatform>arm64</WixCATargetPlatform>
  <PlatformTarget>ARM64</PlatformTarget>
  <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>

<!-- 在编译目标中确保ARM64参数生效 -->
<Target Name="BeforeBuild">
  <PropertyGroup Condition="'$(Platform)' == 'ARM64'">
    <DefineConstants>$(DefineConstants);ARM64</DefineConstants>
  </PropertyGroup>
</Target>

方法3:临时兼容方案(依赖WOW64)

如果暂时无法获取ARM64版WiX CA库,可以用Any CPU编译配合禁用32位偏好:

  • 将自定义动作项目的PlatformTarget改为Any CPU,保留<Prefer32Bit>false</Prefer32Bit>。
  • 在WiX MSI项目中,为ARM64平台添加<DefineConstants>ARM64</DefineConstants>,并给自定义动作指定ARM64平台:
<CustomAction Id="MyCustomAction" BinaryKey="MyCADll" DllEntry="MyEntryPoint" Platform="arm64" />

注意:此方案依赖Windows WOW64层,可能存在兼容性风险,仅作临时过渡使用。

关键提示

candle.exe -v显示的架构是candle自身支持的编译目标(它本身是x86程序),不代表自定义动作的编译架构,无需为此纠结。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:22:34