How to Identify a Missing Dependency
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 开发者_JAVA百科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.
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.
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)...
精彩评论