需求: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方法一和方法二哪个好一点?为什么呢?
实现:
方法一:一个方法是用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方法一和方法二哪个好一点?为什么呢?
rptItems.DataSource = (from c in modelList
orderby c.PrivateMemorySize64 descending
where c.Id!=curren.Id
select c).Select(c => {
string filename = "";
try { filename = c.MainModule.FileName; } catch { }
return new {
c.Id,
c.ProcessName,
c.Threads.Count,
FileName= filename,//用它就报错
PrivateMemorySize64 = (c.PrivateMemorySize64) / 1024
};});
rptItems.DataBind();};