如何识别缺失的依赖关系

时间:2009-10-22 13:55:39

标签: c++ com dependencies

我们有一个遗留的第三方程序在尝试执行某些功能时失败并显示错误“Class Not Registered”。有没有办法告诉它正在寻找什么类?有时它会说“灾难性错误”。

尝试静态和分析Dependency Walker,Kernal32.exe错误。我猜这是实例化失败。它没有透露任何遗漏的依赖。

ProcessMon未显示任何尝试访问注册表或特定文件路径的失败。

花了几天时间使用调试器和工具试图弄清楚它是什么文件。我们有一个正在运行的生产系统,我们可以使用非管理员用户帐户访问。

第三方应用程序是用Delphi编写的,如果它有所作为的话。我们的调用应用程序是C ++。

更新: 使用来自Sysinternals的Process Monitor和一个过滤器来缩小自然注册表从不常见的读取失败,我能够找到丢失的GUID并注册相应的dll。

2 个答案:

答案 0 :(得分:1)

在linux上,我建议使用strace或ltrace来查看程序正在进行的系统调用......好吧,事实证明有一个Windows版本的strace ...:)

StraceNT

如果在Linux上像strace一样工作,你应该能够看到系统调用的内容(以及传递给内核的参数)......

答案 1 :(得分:1)

COM问题很可能发生。 Here是一篇关于如何调试它的文章。基本上,使用RegMon。它将显示COM读取注册表项,以查找类提供程序。