微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。