WiX: Prevent 32-bit installer from running on 64-bit Windows
installation, platform, windows-installer, wix, wix3
Solution
Include the Condition element only in your 32-bit package (i.e., using ?if? preprocessor statement). The Condition would be "NOT Msix64": Launch conditions are things that must be true, so if Msix64 is set, the launch condition would fail and that means it's an x64 OS and a 32-bit package and the correct thing to do is to block.
Problem
Due to user confusion, our app requires separate installers for 32-bit and 64-bit versions of Windows. While the 32-bit installer runs fine on win64, it has the potential to create support headaches and we would like to prevent this from happening. I want to prevent the 32-bit MSI installer from running on 64-bit Windows machines. To that end I have the following condition: ``` <Condition Message="You are attempting to run the 32-bit installer on a 64-bit version of Windows."> <![CDATA[Msix64 AND (NOT Win64)]]> </Condition> ``` With the Win64 defined like this: ``` <?if $(var.Platform) = "x64"?> <?define PlatformString = "64-bit"?> <?define Win64 ?> <?else?> <?define PlatformString = "32-bit"?> <?endif?> ``` Thing is, I can't get this check to work right. Either it fires all the time, or none of the time. The goal is to check presence of the run-time `msix64` variable against the compile-time `Win64` variable and throw an error if these don't line up, but the logic is not working how I intend it to. Has anyone come up with a better solution?