.netwindows-installerwix3

Does Wix 3.14 really support ARM64 and ARM64 custom actions?


Such an easy question? Correct? Doesn't seem to be... Varying websites say it does after a certain version of 3.14. I have downloaded the very latest version (3.14.1.8722) and doing a candle.exe -v gives the supported arch flags of x86, x64, or ia64 (default: x86) So, no ARM64 or arm64 in sight. I am currently using a .wixproj in 3.14 that builds and installs fine for x64 and on x64--and has been doing it for years. If I open the MSI file in Orca, it says it is Arm64...

I don't want to upgrade the tooling because it seems to indicate that 3.14 and 4.0 won't be compatible on the same machine (it says to remove the VS 2022 plugin for Wix to use Wix 4.0). I am working on a test build and I have other projects using 3.14.

I have logged my install on ARM64 and it is dying at the point trying to load my ARM64 CustomAction DLL. It was having some kind of system load problem. I finally looked at the PE Header of the generated custom action DLL and it is 32-bits. I have the x64 configuration and ARM64 configuration exactly the same except Platform is x64 for one and ARM64 for the other. The x64 generates a 64-bit CustomAction DLL and the ARM64 generates a 32-bit CustomAction DLL.

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <OutputPath>$(OutDir)</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
    <OutputPath>$(OutDir)</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>ARM64</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>

The references are:

  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.Deployment.WindowsInstaller">
      <Private>True</Private>
    </Reference>
  </ItemGroup>

And, the Wix stuff is:

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(WixCATargetsPath)" Condition=" '$(WixCATargetsPath)' != '' " />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.CA.targets" Condition=" '$(WixCATargetsPath)' == '' AND Exists('$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.CA.targets') " />

Solution

  • Yes, Arm64 is supported in the core toolset. No, Arm64 is not supported for managed-code custom actions in WiX v3.14. (It is supported in WiX v4 and later.)