简而言之:我想做同样的事情“Dependency Walker”。
是否有可以枚举EXE和/或DLL文件依赖关系的Win32 API函数?
有没有安全的方法来检测ActiveX类的依赖? (我怀疑这是可能的,但谁知道......)
编辑:我知道提供相同核心功能的可用工具(Dependency Walker,ProcessExplorer,AQTime,...)但我想创建自己的程序来转储文本文件包含所需的模块。
答案 0 :(得分:7)
以下命令转储some.exe的直接依赖项:
dumpbin /imports some.exe
它也适用于DLL。
这不会列出依赖项,例如在应用程序启动时加载的插件(通过LoadLibrary调用)。对于COM依赖项也是如此,因为它们以相同的方式工作(据我所知)。
如果您需要知道正在运行的程序使用的所有DLL,请使用ProcessExplorer。
答案 1 :(得分:6)
findstr -i .dll exe.exe |更多| findstr -i .dll |更多
rem:)
答案 2 :(得分:3)
运行应用程序,Process Explorer已在运行,并设置为过滤应用程序.exe名称。
在没有运行可执行文件的情况下,无法检测可执行文件的所有COM依赖项。
答案 3 :(得分:2)
似乎Dependency Walker源代码本身是由Microsoft通过MSJ提供的。请 看看 Re: [DUG]: Dependency Walker 。
您需要引用其他网站进行下载,因为此邮件路径中的链接无效。
请检查 MSJ Source Code Updates :由于我没有时间,我没有检查它是否包含源代码或仅包含EXEfoæes。
答案 4 :(得分:1)
用户@blue ...被Dependency Walker所吸引。使用Dependency Walker时,打开文件后,您可以看到使用的基本要求。只有在执行程序并执行其所有功能时,才能找到所有动态加载的DLL。
有时,如果可以,最好的办法是询问开发人员需要哪些DLL。应用程序可能只在绝对需要时加载一些DLL。例如加载faultrep.dll,用于自定义Windows错误报告,当它即将崩溃时。
答案 5 :(得分:1)
您可能需要遍历可执行文件的文件结构以编程方式执行此操作。因此,像这里提到的'PE Dump'计划: http://msdn.microsoft.com/en-gb/magazine/cc301808.aspx将是一个很好的起点。您可以在此处找到所需的实际代码: http://www.wheaty.net/downloads.htm
答案 6 :(得分:0)
您可以编写一个控制台应用程序来包装它,使用它创建一个PowerShell脚本,或者像我通常最终做的那样,因为我只需要在蓝色月亮中执行一次,将以下内容添加到您的代码中以便快速完成检查:
private static HashSet<string> ReferencedAssemblies = new HashSet<string>();
...
OutputDependencies(Assembly.GetAssembly(typeof(Program)), 0);
...
static void OutputDependencies(Assembly assembly, int indent)
{
if (assembly == null) return;
Console.WriteLine(new String(' ', indent * 4) + assembly.FullName);
if (!ReferencedAssemblies.Contains(assembly.FullName))
{
ReferencedAssemblies.Add(assembly.FullName);
foreach (var childAssembly in assembly.GetReferencedAssemblies())
{
OutputDependencies(Assembly.Load(childAssembly.FullName), indent + 1);
}
}
}