2010-06-25 131 views
4

我有一个.exe文件,我相信它是用VB6创建的。 Visual Studio 6或更高版本中是否有任何工具可让我看到应用程序运行所需的任何动态库?确定.exe依赖关系

回答

14

尝试this - Dependancy Walker。

+0

请注意,程序运行时可能会动态加载一些内容(例如COM组件)。您需要针对依赖项步行者运行该程序并锻炼所有程序功能。 – MarkJ 2010-06-25 13:38:03

6

您可以看到与Dumpbin/imports隐式链接的DLL依赖关系。或Dependency Walker提供的静态视图。但是,VB6程序通常对COM组件有很大的依赖性,并且它们在程序运行时获得需求加载。这些组件需要在程序加载和使用前注册。

为了看到这一点,您需要一个实用程序来显示程序如何使用注册表。 VS6工具箱没有这个功能,你可以使用SysInternals的ProcMon工具。请注意试图在HKLM \ Software \ Classes \ CLSID注册表项中打开注册表项的程序,这是注册COM组件的位置。您应该看到它找不到可以从中确定CLSID的密钥。

这仍然没有真正让你在任何地方,因为这只是一个不透明的数字,它并不告诉你的名称或DLL的位置。在程序正确运行的机器上使用Regedit.exe。找到该键,LocalServer32值告诉你哪个DLL或OCX实现COM组件。

+0

HKLM \ Software \ Classes \ CLSID并非全包。自从Win2K以来,我们已经进行了每用户注册,并且自Vista以来进行了虚拟化每用户注册。隔离清单完全绕过注册表的早期和晚期对象。我不知道什么是“隐式链接的DLL”。也许你的意思是静态链接? – Bob77 2010-06-25 22:30:23

+0

“静态链接动态库”是什么意思?链接一个DLL隐式做:http://msdn.microsoft.com/en-us/library/d14wsce5%28VS.90%29.aspx让Vista将您的程序视为时间的受害者,以便它将虚拟化注册表可能是解决方案我猜。 – 2010-06-25 23:01:57