日期:2014-05-17  浏览次数:20858 次

读取系统进程,用Process和WMI哪个好?
需求:web页面读取系统进程信息,可以结束进程
实现:
方法一:一个方法是用Process.GetProcesses();结合linq查询进程的一些信息

 var modelList = Process.GetProcesses();
        rptItems.DataSource = from c in modelList
                              orderby c.PrivateMemorySize64 descending
                              where c.Id!=curren.Id
                              select new { 
                                  c.Id, 
                                  c.ProcessName, 
                                  c.Threads.Count, 
                                  FileName=c.MainModule.FileName,//用它就报错
                                  PrivateMemorySize64 = (c.PrivateMemorySize64) / 1024
                              };
        rptItems.DataBind();


方法二:因为用MainModule.FileName时报错,我想用WMI方式

ManagementObjectSearcher QS = new ManagementObjectSearcher(new SelectQuery("Win32_Process"));

问题:1
第一个方法中,当我用了FileName=c.MainModule.FileName,报错:仅完成部分ReadProcessMemory 或WriteProcessMemory 请求,没遇见过这个错误,对进程不是很理解,怎么解决这类错误?
问题:2方法一和方法二哪个好一点?为什么呢?

------解决方案--------------------
第一个方法也可以,最好加上try catch,可能有的进程权限不足或者别的问题。

 var modelList = Process.GetProcesses(); 
        rptItems.DataSource = (from c in modelList 
                              orderby&nb