如何识别一个进程是否是托管进程呢?
我的方法是,获得进程对象,枚举进程加载的模块.如果进程加载的模块中包含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);
}
/// 检查一个进程是不是托管进程.速度不太快.
/// </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);
}
这个方法虽然能用但有一个问题.就是它需要遍历一个进程的所有模块.效率不高.如果谁有更好的办法.欢迎赐教。