views:

73

answers:

2

We have a legacy 3rd party program that is failing with the error "Class Not Registered" when it tries to execute certain functionality. Is there a way to tell what class it's looking for? Sometimes it says "Catastrophic error" instead.

Tried Dependency Walker statically and profiling, Kernal32.exe errors. I'm guessing that's the instantiation failing. It didn't reveal any missing dependencies.

The ProcessMon didn't reveal any failed attempts to access the registry or a particular filepath.

Have spent several days with a debugger and tools trying to figure out what file it is. We have a running production system that we can access with a non-Admin user account.

The 3rd party app was written in Delphi if that makes a difference. Our calling app is C++.

Update: Using the Process Monitor from Sysinternals and a filter to narrow the natural registry read failures from the unusual ones I was able to find the GUID that was missing and register the corresponding dll.

+1  A: 

On linux, I would suggest using strace or ltrace to see what system calls the program is making... Well, it turns out there is a Windows version of strace... :)

StraceNT

If this works like strace does on Linux, you should be able to see what system calls (and the paramaters are being passed to the kernel)...

dicroce
+1  A: 

It's with a very large probability a COM problem. Here's an article on how to debug it. Basically, use RegMon. It will show COM reading registry keys, tyring to find the class provider.

MSalters