WiX v5 is here! Let us help.

Sprint 5: Needing a WiX extension

The dev team has been keeping really busy. Not on writing code for our app, of course; instead, there's been a lot of "market research," which appears to be mostly an excuse for the senior folks to try out the latest gadgets -- and expense them, naturally. As a direct response to said gadgets, the dev team has decided that the app will support both plain ol' x64 and Arm64, the latest hotness. A quick glance at the WiX v4 release notes shows that WiX supports Arm64, so we should be able to support it in the installer pretty easily. In fact, knowledgeable as we are about the Windows ecosystem, we know that Windows 11 lets you run x64 apps on an Arm64 machines. But we also know that Windows 10 only supports 32-bit x86 apps on Arm64 machines, not 64-bit x64 apps. The product management team is waffling on whether they want to require Windows 11 or keep supporting Windows 10 until it goes out of service in 2025. So they added an item to our product backlog: Require a matching platform in the installer. That means the x64 package can only install on an x64 machine and likewise for Arm64. We're not exactly sure why the product managers want to block the x64 installer on a Windows 11 Arm64 machine where it's supported, but product managers (indirectly) pay the bills, so who are we to question their wisdom?

Well, one reason to question said wisdom is that it's actually pretty hard to block x64 installers on Arm64: Microsoft is proud of its x64-on-Arm64 emulation in Windows 11 and pretends in a lot of places that an Arm64 machine is an x64 machine. Windows Installer has a built-in property named Msix64 that "is defined only if running on an x64 processor." Yeah, not so much: It's also set when running on Windows 11 on an Arm64 processor. As you can imagine, there's a lot of software that needs to identify the actual processor in use -- and you can imagine for a second time, WiX has you covered. WiX has an extension that includes code to detect the underlying processor of the machine it's running on and we can use that code to block mismatches.