使用 ProcessModuleCollection 查找 .exe 加载的所有 DLL 并没有检测到所有这些 DLL?

问题描述

我需要使用在 Windows 下运行的 c# 应用程序检查 .exe 是否加载了自定义 .dll。
我为此尝试的解决方案很好地定位了 .exe,并检测了 .exe 使用的大多数 .dll,但不是全部,而且它未能找到的就是那个我在找。
我使用了 SysInternals 的 Process Explorer 实用程序作为交叉检查,这确实找到了我正在寻找的与 .exe 相关联的 .dll,表明我正在尝试做的事情是可能的。
c# 代码片段为我的 .exe 选取了 106 个 DLL,而“进程资源管理器”实用程序选取了 110 个:

                Process[] myProc = Process.GetProcessesByName("MyExe");
                foreach (var dllProc in myProc)
                {
                    ProcessModuleCollection PMC = dllProc.Modules;
                    for (int i = 0; i < PMC.Count; i++)
                    {
                        var myPMC = PMC[i];
                        if (myPMC.ModuleName.StartsWith("MyDLL"))
                        {
                            Console.WriteLine("Found the DLL : " + myPMC.ModuleName);
                        }
                    }
                }

有谁知道为什么这种方法不能获取每个 .DLL ? 我对 Windows 如何管理 .exes 和 .dlls 等不熟悉...,但我能想到的唯一区别是 ProcessModuleCollection 可能是在 .exe 首次加载时构造的,并且在初始启动后加载了任何 .dlls -然后错过了。
是否有使用 c# 获取此信息的替代方法?欢迎任何帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)