如何识别一个进程是否是托管进程呢?
我的方法是,获得进程对象,枚举进程加载的模块.如果进程加载的模块中包含mscoree.dll则认为此进程是托管的.mscoree.dll是.NET程序必需加载的DLL.不过.使用C++写的程序也可以加载它以运行托管代码.代码如下

/**//// <summary>
/// 检查一个进程是不是托管进程.速度不太快.
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
public static bool IsCLRProcess(Process p)
...{
foreach (ProcessModule m in p.Modules)
...{
if (0 == string.Compare(m.ModuleName, "mscoree.dll", true))
return true;
}
return false;
}
public static bool IsCLRProcess(int ProcessID)
...{
Process p = Process.GetProcessById(ProcessID);
return IsCLRProcess(p);
}
这个方法虽然能用但有一个问题.就是它需要遍历一个进程的所有模块.效率不高.如果谁有更好的办法.欢迎赐教。
本文介绍了一种通过检查进程是否加载了mscoree.dll来判断进程是否为托管进程的方法,并提供了相应的C#代码实现。
899

被折叠的 条评论
为什么被折叠?



