Use the following questions and answers to better understand the support for Arm-based devices running on Windows.
Windows on Arm FAQs
Do I need to create an Arm version of my Windows app?
Arm-based devices are becoming increasingly popular. While Windows supports emulation for apps with an x64 or x86-based architecture, providing an Arm-native build of your Windows app will improve performance and give your customers the best experience when using an Arm-based device.
Why update my app to Arm when x64 and x86 are both supported via emulation on Windows 11?
While your customers will be able to use your x64 or x86-based app on their Arm device, there is performance overhead that comes with emulation. Treat your customers to an Arm-native version of your Windows apps for the best performance, responsiveness, and optimized battery life on their Arm device.
How do I add an Arm64 native configuration to my Windows app?
Are drivers supported by emulation? Or do I have to add Arm64 native support to any drivers used in my app?
In all cases, kernel-mode drivers and user-mode print drivers MUST be built as native Arm64 binaries to work on Arm64 devices. Additionally, you cannot execute an x86 or x64 setup program to install an Arm64 driver on Arm64 devices. See Building Arm64 Drivers with the WDK.
Does Visual Studio work on Arm?
Both Visual Studio and Visual Studio Code offer Arm-native versions for you to install.
How do I test and debug on Arm64?
See Add Arm support to your Windows app - Test and Debug. For testing, you will need a Windows on Arm device, such as the Windows Dev Kit 2023, or you can run a Windows 11 Arm64 virtual machine.
What if I am blocked from building an Arm-native version of my app by a 3rd party dependency?
There are a few ways to address the scenario when your Windows app relies on a 3rd-party dependency that has not (yet) been updated for Arm. We first recommend reaching out to the owner of the dependency to ask whether there are plans to update the dependency to support Arm. You might also check resources like NuGet or vcpkg, or reach out to the Arm Open Source community for help updating dependencies (such as Linaro). You could rewrite the dependency yourself - Microsoft's "App Assure program" may be able to help. Or you may want to write your app using Arm64EC, which enables you to mix x64 and Arm64 code for a partial Arm-native implementation focused on optimizing the most important aspects of your app for Arm.
How do I update my C++ Windows app to support Arm devices?
What Program Files folder should I use to install my ARM64 application?
You may notice the following directories on your Windows device, used for installing and storing different application file types.
C:\Program Files
: This directory is used for x64 applications, Arm64 applications, Arm64X applications. Learn more about how to port your app to Arm64 or build Arm64X binaries.C:\Program Files (x86)
: This directory is used for x86 applications. Learn more about How x86 emulation works on Arm.C:\Program Files (Arm)
: This directory was used for 32-bit Arm applications, which are no longer being supported in future versions of Windows.
Windows on Arm Virtual Machine FAQ
How do I create a Windows 11 Arm64 Virtual Machine (VM)?
For help on how to create and deploy Windows 11 Arm64 VMs with with Ampere Altra Arm–based processors on Azure, see Quickstart: Create a Windows on Arm virtual machine in the Azure portal. You can also create an Windows on Arm VM locally with a Windows on Arm device using Hyper-V.
Can I host a Windows 11 virtual machine using Hyper-V on a Windows 11 Arm64 device?
Yes, you can. The easiest way to do so is to download the Windows 11 on Arm Insider Preview VHDX from Windows Insider Preview Downloads and use it to create a VM.
Are there any trainings available for adding Arm support to a Windows app and running a VM for testing and debugging?
Yes, see Introduction to Windows on Arm - Port a .NET application to natively support Arm-based processors.
Is CPU Sampling with the Windows Performance Recorder tool supported on ARM-based Hyper-V virtual machines?
Yes, but the feature is currently only available in the Windows Insider Preview Canary channel. If you are willing to enroll your physical ARM device that is hosting your virtual machines in the Canary channel, CPU sampling will be supported in virtual machines; the feature is already supported on physical ARM devices. Sample usage: wpr -start cpu
.