Forcing an ARM64X executable to run as a specific architecture
cppdashboard.dev/r/2026/08/forcing-an-arm64x-executable-to-run-as-a-specific-architectuThis article discusses how to force an ARM64X executable to run as a specific architecture on Windows. It explains the use of the PROC_THREAD_ATTRIBUTE_MACHINE_TYPE attribute to relaunch a program with the desired architecture when loading a DLL fails.
From the article
ARM64X is a fat binary Windows executable and DLL format for 64-bit ARM systems. For DLLs, the choice is clear, since only one of them will work: The version of the DLL that is loaded is the one that matches the host process. If the host process uses the Windows ARM64 ABI, then the ARM64 version of the DLL is used, and if the host process is x86-64-based or uses the Windows ARM64EC ABI¹
For executables, the system has a choice. It could run the process as ARM64 or it could run it as ARM64EC. How can you force the system to choose the architecture you prefer?
You may want to do this if you have a program that is compiled as ARM64X because you have a plug-in model, and you want to be able to support plug-ins that are written either as ARM64 or x86-64. You compile an ARM64 version for…
Share this resource