Force uninstalling before installing any version with wix installer

Thierry picture Thierry · Oct 13, 2014 · Viewed 10.7k times · Source

Does anyone know:

  1. How can I Force wix installer to uninstall any previous copy previously installed, whether minor or major before installing a new version of our setup.

  2. If 1) can't be done when running a new minor/major setup, can I at least display a message saying that a previous version was detected and it should first be uninstalled and cancel the setup?

Thanks.

UPDATE:

I've added the following to my settings.wxi

<Upgrade Id="$(var.UpgradeCode)">

    <!-- Populate NEWERPRODUCTFOUND if there is an installed 
         package with the same upgrade code
         and version is > the version being installed -->
    <UpgradeVersion
         Minimum="$(var.CurrentVersion)"
         IncludeMinimum="no"
         OnlyDetect="yes"
         Language="1033"
         Property="NEWERPRODUCTFOUND" />

    <!-- Populate UPGRADEFOUND if there is an installed 
         package with the same upgrade code
         and the version is between the earliest version defined
         and the version being installed -->
    <UpgradeVersion
         Minimum="$(var.FirstVersion)"
         IncludeMinimum="yes"
         Maximum="$(var.CurrentVersion)"
         IncludeMaximum="no"
         Language="1033"
         Property="PREVIOUSVERSIONSINSTALLED" />
</Upgrade>

I've defined the following in MyProduct.wxs

<?define CurrentVersion="5.0.0.18"?>
<?define FirstVersion="1.0.0.0"?>
<?define UpgradeCode="c1b1bfa0-9937-49eb-812c-5bac06eff858"?>

and finally, I've added this to my <InstallExecuteSequence>

<RemoveExistingProducts Before="InstallInitialize" />

But it still not removing the old version when I increase my version to 5.0.0.19.

Maybe I'm looking at this the wrong way, but in my "Add/Remove Programs" window, I see my setup listed as 5.0.0.18 and I see a second entry as 5.0.0.19

Should I be changing the upgrade code every time I change my version? I thought I had read that this should never be changed.

Any ideas?

Thanks.

Answer

Thierry picture Thierry · Oct 20, 2014

I figured out the answer after a lot of googling!! Windows Installer doesn't take into account the 4 number of the version which is what I was using i.e. 5.0.0.18.

It only looks at the first 3 sets of number making the version number. Once I changed my version to 5.0.18.0 to 5.0.19.0, it worked immediately with the code posted in the question and it removed the previous version and installed the newer one over it.

Note that I've actually removed the above code and ended up using the MajorUpgrade instead as it was all I needed:

<MajorUpgrade
  AllowDowngrades="no"
  AllowSameVersionUpgrades="no"
  IgnoreRemoveFailure="no"
  DowngradeErrorMessage="loc.NewerVersionInstalled"
  Schedule="afterInstallInitialize"/>

Hope this helps someone else!