Client machines are all Windows 10 Pro (64-Bit).
If we were to have MyCompanyApp.msi installed via SCCM, we found that we could update it successfully using SCCM. Everything normal there.
HOWEVER, if I were to run MyCompanyApp.msi locally either by double clicking on the msi or running msiexec, updating it with SCCM fails. Moreover, SCCM goes ahead and runs an install as if it had never detected the previous installation. When you check Control panel, you see the product listed twice; each having a different version number.
The bottom line is that when I mix manual installation/upgrade with SCCM manual installation/upgrade, I have the problem described above. The table below should summarize things.

Debugging: Failed Major Upgrades debugging: WIX does not uninstall older version.
CAUSES? Most likely you have:
1. Upgrade Table
Check the entries in the Upgrade table. Does it look something like this. There are MANY ways to mess this table up. The most common problem is the VERSION RANGE specified. If it is set incorrectly the version found could be outside the range identified as "valid to remove":
2. Installation Context: MSI does not support "cross context" updates as explained here by Rob Mensching - the creator of WiX. My follow-up comment to him there is a more or less crazy approach I used once to remove some straggling installs in the wrong context: Crazy approach. Instead: check what features SCCM has these days to remove per-user installs?
Per-User Installs: Here is a piece on why per-user installs - as implemented by MSI - are not recommended - in my opinion (and many other MSI users).
You can find the per-user installations on the machine in question like this -
note that there could very well be NO per user installations:Remove the if section to get ALL installed MSI products. There are limits to how many characters
MsgBoxcan show. Write to a file instead? (see mid-page here) Or useWScript.Echo msi.Links:
The different installation contexts.
Enum MsiInstallContext:Const msiInstallContextAllUserManaged = 8Const msiInstallContextFirstVisible = 0Const msiInstallContextMachine = 4Const msiInstallContextUser = 2Const msiInstallContextUserManaged = 1The Windows Installer Automation Interface (COM automation).