Evgeni Dyulgerov
Evgeni Dyulgerov

Reputation: 71

How to make certain a Wix installer will override (upgrade) an older version and won't allow a downgrade

I've tried most of the answers on the topic in this forum and other forums, but I still have this problem.

I want to update a bundle version and when I build and install the installer, it should upgrade a previous installation and not create two records in "Programs and Files".

I'm using the following code in Product.wxs.

<Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="miro" UpgradeCode="5ba49b49-25c4-47c0-82da-12bf5310af58">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

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

    <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
        <ComponentGroupRef Id="ProductComponents" />
    </Feature>

</Product>

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
        </Directory>
    </Directory>
</Fragment>

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
        <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
         <Component Id="ProductComponent">
     <File Id="file_Exefile" Source="..\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe">

     </File>
         </Component> 
    </ComponentGroup>
</Fragment>

I am even considering writing my own update logic based on the Installer Processes and their ProductVersion properties, but there are too many cases to consider.

Can you tell me what is wrong with this Product.wxs ,so I can fix it.

Thanks.

Best regards, Evgeni Dyulgerov

Upvotes: 1

Views: 609

Answers (2)

PhilDW
PhilDW

Reputation: 20790

There are several things that could be preventing a major upgrade. You appear to have the correct MajorUpgrade logic, but:

It would be better if you incremented your product version in the first three fields, that's more normal for a major upgrade.

It's not obvious that your current UpgradeCode is the same as the older product's, so check that it is.

If the previous product's install scope was perUser the major upgrade will not work because cross-context major upgrades aren't allowed by Windows Installer.

Do the install taking a verbose log and look at all occurrences of FindRelatedProducts. There will be more than one, but see if the one in the upgrade install finds a previously installed product.

Upvotes: 2

user1064248
user1064248

Reputation:

You have to add an upgrade section to your product section.

<Upgrade Id='5ba49b49-25c4-47c0-82da-12bf5310af58'>
   <UpgradeVersion OnlyDetect='no' Property='ISUPGRADE'
                      Minimum='0.0' IncludeMinimum='yes'
                      Maximum='1.0.0.0' IncludeMaximum='no' />     
</Upgrade>

Checkout Upgrades and Modularization on Firegiant

Also the WiX Documentation chm (in your Start Menu) is very helpful.

Upvotes: 0

Related Questions