Problem: Existing install of an MSI application will not un-install.

On 30+ servers a vendor supplied MSI needed to be updated to the next version however the application would not un-install using any standard removal methods with various switches and will not upgrade to the next version. Using MSIZap seems to work but the subsequent install of the next version results in mis-match errors.

Reason: Rogue property set via an MST transform on install.

A PROPERTY was found that was set via a transform when the original application was installed ADDDEFAULT=ALL. Whichever setting this property is affecting it allowed the install but not the un-install.

Fix: Break the link between the transform and the MSI.

Within the HKEY_CLASSES_ROOT\Installer\Products\<GUID> registry key a VALUE exists that connects the MSI to it's transform MST file so removing this VALUE will allow the normal un-install process to complete. Creating a basic MSI to remove the VALUE was decided as the easiest option to rollout using existing deployment tools.


Create a basic MSI with an entry in the RemoveRegistry table replacing the values with your own settings, I used '0' for the root as I needed to work with HKEY_CLASSES_ROOT but check the details below for your own values.

*Column Name* *Row Contents*
RemoveRegistry RemoveRegistry01
Root 0
Key Installer\Products\<GUID>
Name Transforms
Component ISRegistryValue
 
RemoveRegistry (s72)

Unique name to define the entry (you can choose this)

Root (i2)

numeric value defining the registry hive you'll be deleting from
0 = HKCR
1 = HKCU
2 = HKLM
3 = HKU

Key (l255)

The rest of the key name, such as SOFTWARE\MyProduct\

Name (L255)

Name of the Registry VALUE, such as UninstallString

Component_ (s72)

Name of a component from the component table to link the removal too, this has to be a component selected for install. If you don't have an existing component to use just create a new component.