cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
tgvishnupriyabe
Level 3

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,

Labels (1)
0 Kudos
(3) Replies
shunt
Revenera Moderator Revenera Moderator
Revenera Moderator

How are you extracting the COM data from the .dll?

Are you using self register, performing regsvr32 during the install, or are you are using COM extract at build?

0 Kudos
johjoh70771
Level 4

My first idea was to give the components in both setups the same component code / GUID.

0 Kudos

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?

0 Kudos