04/30/2014
The MSI for the 107 release has a package code of {725FFCF9-5D38-4249-8697-9BDB415E6B00}.
This is the same as the package code for the 105 release, which means that Windows Installer cannot distinguish between the two versions. If you have 105 on a machine and you try to install 107, you are told that "Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.".
In our case, we were running the MSI in silent mode as part of a larger installer, so we didn't see the message. Apparently our upgrade use-case has been leaving 105 on the system instead of upgrading it to 107. Fortunately, this is a relatively benign failure mode, but it is still wrong. I think we need a 108 with a unique package code.
02/24/2014
From https://docs.microsoft.com/en-.....kage-codes : "Nonidentical .msi files should not have the same package code."
04/30/2014
You are correct and I have mis-diagnosed my problem. Sorry for the confusion.
Sadly, the problem as described in my second paragraph is real enough. (I've just reproduced it on a clean machine.)
Some searching suggests that in fact both the product and package codes have to be unique to avoid this message. (The GUID that truly identifies the product is, perversely in my view, called the upgrade code.) This is noted, for example, at https://blogs.msdn.microsoft.c.....-used-for/ and although that isn't an authoritative reference (and is actively contradicted by, say, https://docs.microsoft.com/en-.....oduct-code) it nevertheless appears to be necessary to change the product code if you want updates to actually work.
04/30/2014
I think I have a better understanding now. I have been using Orca.exe (https://docs.microsoft.com/en-.....i/orca-exe) to examine various MSI files.
It turns out that merely changing the product isn't enough. I used Orca to give the OPC 3.0.107 package a new ProductId and although it installed, it installed alongside the 105.1 package. (I dare say the 105 files got overwritten but Windows believes they are both still present, which is clearly untrue.)
Looking at pairs of packages from other vendors that do upgrade correctly, I see that they generally have two rows in the Upgrade table. For example:
{upgradeguid} vmin=3.0.10700 attr=258 action=NEWERVERSIONDETECTED
{upgradeguid} vmax=3.0.10700 attr=1 action=OLDERVERSIONDETECTED
In WiX, these two rows are created with:
<Upgrade Id="$(var.UpgradeCode)">
<!-- Detect any newer version of this product -->
<UpgradeVersion Minimum="$(var.Version)"
IncludeMinimum="yes"
OnlyDetect="yes"
Language="1033"
Property="NEWERVERSIONDETECTED"/>
<!-- Detect and remove any older version of this product -->
<UpgradeVersion Maximum="$(var.Version)"
IncludeMaximum="no"
OnlyDetect="no"
Language="1033"
Property="OLDERVERSIONDETECTED"/>
</Upgrade>
The additional row detects an existing older version and because it doesn't have bit 8 set in its attributes it will cause that older version to be removed.
By itself, however, this extra row is not enough either. Windows Installer apparently distinguishes three kinds of upgrades: small, minor and major (https://docs.microsoft.com/en-.....d-upgrades). Only major upgrades use the upgrade table (https://docs.microsoft.com/en-.....r-upgrades) and major upgrades are ones where the product code is different. So I used Orca to change the Product code and also add the extra row in the upgrade table and this removed 105 and installed 107.
I hope my experiments (and links) are helpful and thanks for the time you've spent on this.
1 Guest(s)