如何识别一个进程是否为托管进程

如何识别一个进程是否是托管进程呢?
我的方法是,获得进程对象,枚举进程加载的模块.如果进程加载的模块中包含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);
        }

 

这个方法虽然能用但有一个问题.就是它需要遍历一个进程的所有模块.效率不高.如果谁有更好的办法.欢迎赐教。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值