问题描述
我需要使用在 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 (将#修改为@)