枚举进程模块为什么不行啊。

dna_xp 2003-09-15 10:43:01
p是某进程

...
ProcessModuleCollection myProcessModuleCollection = p.Modules;

for (int i=0;i<myProcessModuleCollection.Count;i++)
{
ProcessModule pm = myProcessModuleCollection[i];
}

运行后出错
未处理的“System.ComponentModel.Win32Exception”类型的异常出现在 system.dll 中。

其他信息: 无法枚举进程模块
...全文
502 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dna_xp 2003-09-15
  • 打赏
  • 举报
回复
是不是没有如果该进程没有附加模块,就会出错?
carper 2003-09-15
  • 打赏
  • 举报
回复
system
System idle Process

这两个进程是系统底核进程, 他们内部没有模块。
其他进程都是可以的。
carper 2003-09-15
  • 打赏
  • 举报
回复
GetCurrentProcess 获得的是当前进程,拿来的数组,写成

Process[] p = Process.GetCurrentProcess();

肯定是错误的。

Process[] p = Process.GetProcesses();
是获得所有的进程。如果你要这样使用的话,范例代码如下:
注意:有些进程没有附加模块

private void button1_Click(object sender, System.EventArgs e)
{
Process[] p = Process.GetProcesses();
for(int j=0;j<p.Length;j++)
{
ProcessModuleCollection myProcessModuleCollection;
try
{
myProcessModuleCollection = p[j].Modules;
}
catch(Exception ex)
{
myProcessModuleCollection = null;
MessageBox.Show(p[j].ProcessName+"\r\n"+ex.Message);
}
if (myProcessModuleCollection != null)
{
for (int i=0;i<myProcessModuleCollection.Count;i++)
{
ProcessModule pm = myProcessModuleCollection[i];
}
}
}
}
dna_xp 2003-09-15
  • 打赏
  • 举报
回复
写错了是Process[] p = Process.GetProcesses();
dna_xp 2003-09-15
  • 打赏
  • 举报
回复
楼上的朋友,你的代码里
Process p = Process.GetCurrentProcess();
应该是
Process[] p = Process.GetCurrentProcess();
微软的帮助里都是如此写的呀
你的代码只是列出当前运行进程的模块而已,我是要迭代所有的进程,然后再迭代每个进程的模块
carper 2003-09-15
  • 打赏
  • 举报
回复
没错呀,我在一个win窗体应用中测试:

using System.Diagnostics;

private void button1_Click(object sender, System.EventArgs e)
{
Process p = Process.GetCurrentProcess();
ProcessModuleCollection myProcessModuleCollection = p.Modules;
for (int i=0;i<myProcessModuleCollection.Count;i++)
{
ProcessModule pm = myProcessModuleCollection[i];
}
}

你把你的代码更详细的贴出来。
wkyjob 2003-09-15
  • 打赏
  • 举报
回复
帮你顶
carper 2003-09-15
  • 打赏
  • 举报
回复
也就是这一行:

myProcessModuleCollection = p[j].Modules;

carper 2003-09-15
  • 打赏
  • 举报
回复
对,可以这么理解。

你单步调试一下,就会看到,异常产生后,

myProcessModuleCollection 的值为:

Item <无法查看索引属性> System.Diagnostics.ProcessModule

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧