2009-10-22 33 views
1

我们有一个传统的第三方程序在尝试执行某些功能时失败,出现“类未注册”错误。有没有办法告诉它正在寻找什么类?有时它会说“灾难性错误”。如何识别缺失的依赖关系

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

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

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

第三方应用程序是用德尔福编写的,如果这有所帮助的话。我们的通话应用程序是C++。

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

回答

1

它具有非常大的可能性COM问题。 Here是如何调试它的文章。基本上,使用RegMon。它将显示COM读取注册表项,以查找类提供程序。

1

在Linux上,我会建议使用strace的或ltrace哪些系统调用程序正在进行......嗯,原来有strace的一个Windows版本的... :)

StraceNT

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