Hi Ales,
In the installation log of your second package (called Test2.log), you can find the following lines:
Code: Select all
MSI (s) (5C:4C) [09:25:02:537]: Disallowing uninstallation of component: {18B81CE4-A495-4F45-B6A6-EBA909FD5315} since another client exists
MSI (s) (5C:4C) [09:25:02:537]: Disallowing uninstallation of component: {52519647-943F-40E8-80FE-6C38119F4D2D} since another client exists
MSI (s) (5C:4C) [09:25:02:537]: Disallowing uninstallation of component: {531C4019-26F8-4B8E-A1D7-CA7EA71E7F26} since another client exists
MSI (s) (5C:4C) [09:25:02:537]: Disallowing uninstallation of component: {FB9034F3-EC31-497A-8C37-ACE9FFD2FE3D} since another client exists
MSI (s) (5C:4C) [09:25:02:537]: Disallowing uninstallation of component: {D5C873D9-F39C-44EE-B959-6BDE0DC0AA4F} since another client exists
This is the reason why your files or registry entries are not removed.
Basically, this can happen if the same components are shared between multiple packages installed on the same machine. Windows Installer keeps a refcount for the components and does allow removing them until all the applications that use them are removed.
You can find the other product using the same component GUIDs and remove that application as well (it may be a broken old version of your own product that could not be removed). In this case, you will be able to find the component under HKEY_CLASSES_ROOT\Installer\Components. The component keyname is the GUID re-packed.
A packed GUID can be obtained by applying a transform to a standard GUID. This transform performs the following operations:
- •removes the curly braces and separating dashes from a standard GUID
•writes each group of the first three groups of hexadecimals characters in a standard GUID in reverse order
•switches every two characters in the fourth and fifth group in a standard GUID
Let's consider the following example:
Original Product Code:
Code: Select all
{12345678-ABCD-WXYZ-1234-ABCDEFGHIJKL}
The packed GUID:
Please note that manually deleting some registry enrties doesn't make a really clean machine. It is highly recommended using virtual machine software, so you can easily reset the virtual machine to a known clean state (and also don't have to worry if your install breaks the machine).
a) Is it correct/safe solution?
b) Should not be this GUID generated new automatically for every version/build or upgrade code/product code change?
When changing a GUID for a component, the ability to create a patch between the two versions of your project is lost.
If you have other questions, please let us know.
Best regards,
Dan
FOLLOW US