Commadore64
Pilgrim

how to prevent "Another version of this product is already installed" ?

I want my installer to detect whether it has already been previously installed and if so display my own custom msg instead of showing the default Windows Installer error:

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.

I have 32-bit and 64-bit versions of my installer for the same product which have (nearly) the exact same code & custom action sequence (there are only minor differences which are not relevant to this issue)

My 32-bit installer works perfectly fine (it shows my custom msg if I run the installer when the product is already installed), but my 64-bit installer does NOT work correctly and always shows the unwanted Windows error msg.

CheckPreviousVersion is the first function called as a Custom Action during the UI sequence, I've tried putting it in different spots (after InstallValidate) but nothing works. I've generated a verbose log file but I can't tell if there's anything useful in it that might explain this behavior:

[CODE]=== Verbose logging started: 05/03/2013 16:27:20 Build type: SHIP UNICODE 5.00.7601.00 Calling process: C:\Windows\system32\msiexec.exe ===
MSI (c) (0C:70) [16:27:20:258]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

MSI (c) (0C:70) [16:27:20:258]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

MSI (c) (0C:94) [16:27:20:331]: Resetting cached policy values
MSI (c) (0C:94) [16:27:20:331]: Machine policy value 'Debug' is 0
MSI (c) (0C:94) [16:27:20:331]: ******* RunEngine:
******* Product: Hello World (64-bit).msi
******* Action:
******* CommandLine: **********
MSI (c) (0C:94) [16:27:21:546]: Machine policy value 'DisableUserInstalls' is 0
MSI (c) (0C:94) [16:27:21:557]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'C:\single-exec\Hello World (64-bit).msi' against software restriction policy
MSI (c) (0C:94) [16:27:21:557]: Note: 1: 2262 2: DigitalSignature 3: -2147287038
MSI (c) (0C:94) [16:27:21:557]: SOFTWARE RESTRICTION POLICY: C:\single-exec\Hello World (64-bit).msi is not digitally signed
MSI (c) (0C:94) [16:27:21:558]: SOFTWARE RESTRICTION POLICY: C:\single-exec\Hello World (64-bit).msi is permitted to run at the 'unrestricted' authorization level.
MSI (c) (0C:94) [16:27:21:584]: Cloaking enabled.
MSI (c) (0C:94) [16:27:21:584]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (0C:94) [16:27:21:586]: End dialog not enabled
MSI (c) (0C:94) [16:27:21:586]: Original package ==> C:\single-exec\Hello World (64-bit).msi
MSI (c) (0C:94) [16:27:21:586]: Package we're running from ==> C:\single-exec\Hello World (64-bit).msi
MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: Uninstall Flags override found.
MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: Uninstall VersionNT override found.
MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: Uninstall ServicePackLevel override found.
MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: looking for appcompat database entry with ProductCode '{B8CBA92E-2140-48AB-B4EA-A4C3FF10295B}'.
MSI (c) (0C:94) [16:27:21:589]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (0C:94) [16:27:21:599]: MSCOREE not loaded loading copy from system32
MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'DisablePatch' is 0
MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'AllowLockdownPatch' is 0
MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'DisableLUAPatching' is 0
MSI (c) (0C:94) [16:27:21:608]: Machine policy value 'DisableFlyWeightPatching' is 0
MSI (c) (0C:94) [16:27:21:609]: APPCOMPAT: looking for appcompat database entry with ProductCode '{B8CBA92E-2140-48AB-B4EA-A4C3FF10295B}'.
MSI (c) (0C:94) [16:27:21:609]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (0C:94) [16:27:21:609]: Transforms are not secure.
MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding MsiLogFileLocation property. Its value is 'C:\single-exec\INSTALL64.LOG'.
MSI (c) (0C:94) [16:27:21:609]: Command Line: CURRENTDIRECTORY=C:\single-exec CLIENTUILEVEL=0 CLIENTPROCESSID=7948
MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{47A766F9-85F8-4166-80D4-BA91B7415A3F}'.
MSI (c) (0C:94) [16:27:21:609]: Product Code passed to Engine.Initialize: ''
MSI (c) (0C:94) [16:27:21:609]: Product Code from property table before transforms: '{B8CBA92E-2140-48AB-B4EA-A4C3FF10295B}'
MSI (c) (0C:94) [16:27:21:609]: Product Code from property table after transforms: '{B8CBA92E-2140-48AB-B4EA-A4C3FF10295B}'
MSI (c) (0C:94) [16:27:21:609]: Product registered: entering maintenance mode
MSI (c) (0C:94) [16:27:21:609]: Determined that existing product (either this product or the product being upgraded with a patch) is installed per-machine.
MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding ProductState property. Its value is '5'.
MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding ProductToBeRegistered property. Its value is '1'.
MSI (c) (0C:94) [16:27:21:609]: Entering CMsiConfigurationManager::SetLastUsedSource.
MSI (c) (0C:94) [16:27:21:609]: Specifed source is already in a list.
MSI (c) (0C:94) [16:27:21:609]: User policy value 'SearchOrder' is 'nmu'
MSI (c) (0C:94) [16:27:21:609]: Machine policy value 'DisableBrowse' is 0
MSI (c) (0C:94) [16:27:21:609]: Machine policy value 'AllowLockdownBrowse' is 0
MSI (c) (0C:94) [16:27:21:609]: Adding new sources is allowed.
MSI (c) (0C:94) [16:27:21:609]: PROPERTY CHANGE: Adding PackagecodeChanging property. Its value is '1'.
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.
{B8CBA92E-2140-48AB-B4EA-A4C3FF10295B}
MSI (c) (0C:94) [16:27:21:610]: Note: 1: 1729
MSI (c) (0C:94) [16:27:21:610]: Product: Hello World (64-bit) -- Configuration failed.

MSI (c) (0C:94) [16:27:21:611]: Windows Installer reconfigured the product. Product Name: Hello World (64-bit). Product Version: 8.7. Product Language: 1033. Manufacturer: Hello World. Reconfiguration success or error status: 1638.

MSI (c) (0C:94) [16:27:21:613]: MainEngineThread is returning 1638
=== Verbose logging stopped: 05/03/2013 16:27:21 ===[/CODE]
Labels (1)
0 Kudos
2 Replies
Christopher_Pai
Pilgrim

Re: how to prevent "Another version of this product is already installed" ?

That message gets displayed when an MSI with ProductCode GUIDA and PackageCode GUIDB gets installed and now you try to install an MSI with ProductCode GUIDA and PackageCode GUIDC. This scenario is known as a minor upgrade or small update and requires a setup.exe to issue the command:

msiexec /i foo.msi REINSTALLMODE=vomus REINSTALL=ALL

The text of the message is not customizable. The only way you could is to create your own bootstrapper UI.
0 Kudos
Commadore64
Pilgrim

Re: how to prevent "Another version of this product is already installed" ?

Excellent, thank you.
I've also found some additional info which spells this out in more detail:
http://www.msigeek.com/1256/how-do-you-create-a-minor-upgrade-for-an-application-using-installshield
http://blogs.msdn.com/b/pusu/archive/2009/06/10/understanding-msi.aspx

What is PackageCode in MSI Package?

The package code is the unique GUID identifying a particular Windows Installer package. Here, package maps to a physical file with extension name ".MSI". Remember, a product consists of one or multiple (MSI) packages, and one package also can be shared among different products. The combination of ProductCode and PackageCode is used to determine if the users want to reinstall the product or not. I found the book "The Definitive Guide to Windows Installer" has the best explaination on this. There are four scenarios:

If you install same product (same ProductCode) from the same package (same PackageCode), it means you want to go to "repair" or "uninstall" mode.
If you install same product (same ProductCode) from the different package (different PackageCode), it is not allowed. You willl get message "Another version of this product is already installed", and you have to remove the existing installed product before you install the new one.
If you install different product (different ProductCode) from the package (same PackageCode), it would go into maintenance mode and ask for a repair or remove.
If you install different product (different ProductCode) from the package (different PackageCode), the installer will think it is a NEW product and let you go ahead.




Christopher Painter wrote:
That message gets displayed when an MSI with ProductCode GUIDA and PackageCode GUIDB gets installed and now you try to install an MSI with ProductCode GUIDA and PackageCode GUIDC. This scenario is known as a minor upgrade or small update and requires a setup.exe to issue the command:

msiexec /i foo.msi REINSTALLMODE=vomus REINSTALL=ALL

The text of the message is not customizable. The only way you could is to create your own bootstrapper UI.
0 Kudos