cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
sgoldstein
Level 6

Nested Uninstallation Error - 1605

My install contains a nested install of a database product (the original developer didn't realize that nested installs are not recommended). During major upgrade from version X to Y, there's a condition on the uninstall of the database to avoid removing the data. So, the system is left in a state in which Y is installed, but the nested install is from X. When I try to uninstall Y, it gets to the point where it tries to uninstall the database and I get a 1605 error.

So, it seems like the registry is corrupted in some way. The question is:
1. How do I figure out what is corrupted?
2. How do I fix it?
3. Is there a way to not uninstall the nested install during upgrade and not corrupt the registry?

Thanks.

Scott
Labels (1)
0 Kudos

(6) Replies
sgoldstein
Level 6

I'm still having this problem. Any help?
0 Kudos
DarthVeda
Level 3

Honestly Its been sometime i worked with nested install.

Can you see if there is a way to uninstall your nested install of X.

like taking the uninstall key from the HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall.

You have to drill down all these keys to find the product code of your nested install. take the uninstall string.

Add that into your Y installation to uninstall the X Nested Install.

I am not sure but just an idea this may work. good luck.
0 Kudos
shantanu_sen
Level 3

Unfortunately, this does not work - even when the exact string is run, it pops up a dialog saying 'This action is only valid for products that are currently installed'.

It seems that some part of the registry related to this got corrupted.

Shantanu
0 Kudos
DarthVeda
Level 3

I beliver a nested install product , the child product can be uninstalled only by its parent product.

It cannot be uninstalled directly and only the parent can do it.

Check the KB Article
http://support.microsoft.com/kb/306439

The last point below clearly tells the reason for uninstall fail in this case.

Although you can create a nested MSI installation, there are drawbacks to doing this. These drawbacks include the following:

Nested Installations cannot share components.
An administrative installation cannot contain a nested installation.
Patching and upgrading will not work with nested installations.
The installer will not correctly cost a nested installation.
Integrated ProgressBars cannot be used with nested installations.
Resources that are to be advertised cannot be installed by the nested installation.
A package that performs a nested installation of an application should also uninstall the nested application when the parent product is uninstalled.
0 Kudos
DarthVeda
Level 3

check the below KB Article

http://support.microsoft.com/kb/306439

A package that performs a nested installation of an application should also uninstall the nested application when the parent product is uninstalled.


So this ability to uninstall the child package should be part of the parent package. In your case add the uninstall action through transform in the parent package. that should probably work
0 Kudos
shantanu_sen
Level 3

Thanks for the info. We know that it is not a good design to have nested installs, but unfortunately we are dealing with legacy code that is very hard to change at this point.

I actually found the issue why the un-installation is not working. The nested installer creates an entry in HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products for the internal DB that we are installing as a nested install.

An entry in that key is Clients - and this contains the product code of the parent which is the product that we are installing.

During the major upgrade we are not running the nested installer - the custom action has Not IS_MAJOR_UPGRADE in the condition.

But we are changing the product code in the major upgrade - and since we are not using the nested installerduring this process, the registry entry of the installed DB still contains the old product code.

At the time of uninstalling the upgraded product, the nested uninstaller runs but fails with 1605 error.

If we manually change the product code of the registry entry to the new product code that we generated during the upgrade then we can successfully uninstall the product.

The question is - under the circumstances (we still have to unfornutately use the nested installer) what is the best way of touching the registry entry of the installed DB during an upgrade?

My goal is to just modify the relevant registry entry of the DB (installed using the nested installer) during an upgrade - we do not want to completely uninstall and reinstall the DB since we do not want to remove user data during the upgrade.

I can add another custom action that alters this registry entry, but that seems like a hack to me.

I tried adding REINSTALL="All" REINSTALLMODE="ous" and removed Not IS_MAJOR_UPGRADE from the condition of the custom action that triggers this nested install. But this somehow stops the DB being installed on a clean install (not an upgrade). I also read the REINSTALL cannot be used for major upgrades?

Is there a better way to do this?

Thanks for any help.

Shantanu
0 Kudos