- Revenera Community
- :
- InstallShield
- :
- InstallShield Forum
- :
- Re: Side by side installation of 32 bit and 64 bit application followed by uninstallation of one imp...
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Subscribe
- Mute
- Printer Friendly Page
Side by side installation of 32 bit and 64 bit application followed by uninstallation of one impacting other
We have two installers for 32 bit add 64 bit installer holding 32 bit and 64 bit respective binaries.
There are few COM binaries in it, which currently has same interface name and same CLSID for both 32 bit and 64 bit installers.
We are facing a problem where we have both 32 bit and 64 bit installers on same machine, but after uninstall of any one of them, we see other getting impacted.
We see few shared common COM entries getting removed , because of which the other application (of different bitness) getting impacted.
Analyzing further we see the below problem:
There are few COM entries getting created as part of our installation (of 32 bit and 64 bit) , one under common location and the other under their respecitve 32 bit/64 bit registry hive
Taking one of our COM dll as example, CoLocator2.dll, below keys are getting generated
HKEY_CLASSES_ROOT\QuickBooks.CoLocator\CLSID -Common between 32 bit and 64 bit sharing same interface name and CLSID
HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{E53C85D6-E6D9-4BCF-A623-72062A99AA7F} - For 32 bit
HKEY_CLASSES_ROOT\CLSID\{E53C85D6-E6D9-4BCF-A623-72062A99AA7F} - For 64 bit
As we have marked the component holding the COM dll as "Shared" - msidbComponentAttributesSharedDllRefCount, we see the SharedDlls registry getting updated with reference count being incremented to one for that specific dll.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\SharedDlls
But as the SharedDlls registry hives are seperate for 32 bit and 64 bit dlls, we see our COM dll - 32 bit and 64 bit part of 32 bit installer and 64 bit installer respectively, makes a new entry with reference count as 1(instead of incrementing the count for same dll name)
Because of this, during uninstall of 32 bit installer(or 64 bit installer), we see SharedDll reference count getting decremented to 0 and so the related COM entries are also removed, thus impacting the other.
We also have dependencies on the above COM components, for which we didnt make change to the interface name and CLSID between 32 bit and 64 bit COM dll to maintain backward compatibility.
We wanted to support side by side installation of 32 bit and 64 bit application and uninstall of one should not impact other.
We would like to see your support, on how to solve the above problem,
My first idea was to give the components in both setups the same component code / GUID.
I have tried using same component GUID, but still seeing the same problem as the SharedDlls registry is different for both 32 bit and 64 bit . Can you please let me know if there is any other solution for this?