2013-03-07 82 views
0

我试图诊断一个案件,当一些可执行文件没有从启动运行。如何找到在C++注册表中注册的DLL的绝对路径?

首先,我要检查是否存在磁盘(它并未被删除)上的filename.exe

我输入的是可执行文件的名称和它的UUID。

问题:有了这些输入,我怎样才能检查注册表,如果它是注册,如果是的话,可执行文件的路径是什么?

+1

你是什么意思的“一些可执行的DLL”? DLL被加载*,而不是被执行*。 – Johnsyweb 2013-03-07 07:56:34

+0

@ Johnsyweb-感谢您的评论。对不起,我的术语不太准确。可执行文件dll必须在启动时启动。当它不启动时,我想要诊断原因。一种选择是可执行文件不存在。 – Sanich 2013-03-07 08:27:36

+1

我相信@Johnsyweb所指的是你的文件是一个.dll或一个可执行文件(.exe)..一个.exe文件可以在启动时直接加载和运行,.dll将被加载并通过代码执行另一个过程 - 所以这种文件会影响你如何解决你的问题.. – Michael 2013-03-07 09:04:40

回答

2

它看起来像你正在寻找Dependency Walker

Dependency Walker中检测到很多常见的应用问题,如缺少模块,无效的模块,导入/导出不匹配,循环依赖错误,不匹配的机器类型的模块,并模块初始化失败。

您可以从http://www.dependencywalker.com/

的Dependency Walker下载一个副本是完全免费使用。但是,您可能无法从分发中获益,也不能将其与其他产品捆绑销售。

如果您在Dependency Walker打开.EXE文件,你会看到所有相关的模块(DLL)中的层次树形图。缺少的DLL以红色显示(我认为,自从我上次使用该工具以来已经有几年了)。

1

如果这是一个自动化组件,您应该能够在注册表项HKEY_CLASSES_ROOT\CLSID\uuid\LocalServer32下找到文件路径,其中uuid是相关组件的uuid。如果该组件驻留在.dll而不是.exe中,则该组件可能位于\InProcServer32下,而不是\LocalServer32密钥。 (详情请参阅here)。

1

我认为最好的方法是运行注册表并通过注册表查找dll名称。 只需F3(找到下一个),直到你找到一个路径的dll值。它每次都有效