确定 .exe 文件的依赖关系。

5

我有一个 .exe 文件,我认为它是用 VB6 创建的。在 Visual Studio 6 或更高版本中,是否有任何工具可以让我查看应用程序运行所需的任何动态库?

2个回答

14

请注意,程序运行时可能会动态加载某些内容(例如COM组件)。您需要使用依赖项查找器运行程序并测试所有程序功能。 - MarkJ

6
您可以使用Dumpbin /imports查看DLL的隐式链接依赖项。 或者使用Dependency Walker提供的静态视图。 但是,VB6程序通常对COM组件有很强的依赖性,并且它们在程序运行时被需求加载。 这些组件需要在程序加载和使用它们之前进行注册。
要查看这一点,您需要一个显示程序如何使用注册表的实用程序。 在VS6工具箱中没有这样的工具,您可以使用SysInternals的ProcMon实用程序。 注意程序尝试打开HKLM \ Software \ Classes \ CLSID注册表键中的密钥,这是COM组件注册的位置。 您应该看到它无法找到该键,从而可以确定CLSID。
但这仍然不能让您进一步了解情况,因为那只是一个不透明的数字,它并不告诉您DLL的名称或位置。 在程序正确运行的计算机上使用Regedit.exe。 找到该键,LocalServer32值将告诉您哪个DLL或OCX实现了COM组件。

HKLM\Software\Classes\CLSID不是全面的。自Win2K以来,我们就已经有了每个用户的注册表和虚拟化的每个用户的注册表。对于早期和后期绑定对象,隔离清单完全绕过注册表。我不知道“implicitly linked DLL”可能是什么。也许你指的是静态链接? - Bob77
“静态链接动态库”是什么意思?隐式链接DLL确实会:http://msdn.microsoft.com/en-us/library/d14wsce5%28VS.90%29.aspx让Vista将您的程序视为时间的受害者,以便虚拟化注册表可能是一个解决方案,我想。 - Hans Passant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接