How can I half-register a COM component?

I create the installer using the Visual Studio 2008 deployment (installation) project. The project has a privileged launch condition so that only administrators can run it. It uses a merge module provided by a third party to register a COM component. The COM component is displayed through the .NET DLL, which, in turn, is used by the program for which I am creating the installer. (Features: This is an Intuit merger module that sets up the QBFC framework).

After the installation is complete, the COM component cannot be loaded. Error "class not registered". But when I go into the registry, I see that all the correct entries are in HKEY_CLASSES_ROOT\CLSID\{the class id} - where the class identifier matches the class identifier of the error message. If I then open the command line in administrative mode and re-register the DLL on the COM server using Regsvr32, everything is fixed, but I do not see any changes in KEY_CLASSES_ROOT\CLSID

When I check the system using the process monitor, while it receives an error not registered by the class, I see that the application receives a "name not found" error when trying to open the CLSID, although the CLSID is definitely there (I have a double and triple flag). I think this should have something to do with permissions. An alternative theory is that perhaps the class message is not registered from the dependent component, but this does not explain what I see on the process monitor.

All of these test results come from the Windows 7 Ultimate 32-bit operating system.

What steps will you take to understand this problem?

+1
source share
1 answer

One thing that might be is a problem with the component category cache. This is a long snapshot, but if you add the installation step to remove the keys under HKEY_CLASSES_ROOT\Component Categories\ , will this help? If so, you need to find out which comcat cache you need to delete (i.e. which object uses your object).

Another thing you can do is export the entire registry, complete your installation, export the registry, record regsvr32, export the registry. Then check each revision of the exported registry file. This may give you an idea of ​​what has changed, at least.

Finally, make sure that you are doing the 64-bit registration correctly if it is a 64-bit machine.

+2
source

All Articles