VB.NET遍历系统进程获取MainModule.FileName路径报错问题求助
问题原因与解决方案
你遇到的报错由两类问题共同导致:
1. 基础代码顺序错误
你的代码中For Each Proc As Process In ProcessList写在了ProcessList变量定义的前面,运行时首先会触发「变量未定义」错误,需要先声明变量再遍历。
2. MainModule属性读取限制
这是你报错的核心原因:
- 64位系统下如果你的程序生成目标为32位(x86),没有权限读取64位进程的主模块信息,会直接抛出拒绝访问错误
- 就算架构匹配,系统核心进程、其他用户启动的进程、权限高于当前程序的进程,也会因为权限不足无法读取MainModule属性
修复步骤
- 打开项目属性的「生成」选项卡,将目标平台改为任意CPU,取消勾选「首选32位」
- 给MainModule读取逻辑加异常捕获,跳过无权限访问的进程
- 修正代码执行顺序
修正后的可用代码如下:
' 先获取进程列表再遍历 Dim ProcessList As List(Of Process) = Process.GetProcesses.ToList() For Each Proc As Process In ProcessList Dim Name As String = Proc.ProcessName Dim Path As String = String.Empty Dim Icon As System.Drawing.Image = Nothing Try Path = Proc.MainModule.FileName Icon = System.Drawing.Icon.ExtractAssociatedIcon(Path).ToBitmap() Catch ex As Exception ' 无权限读取的进程直接跳过,或者你可以自行赋值默认值 Continue For End Try ' 后续你的业务逻辑 Next
补充说明
- 如果需要尽可能读取更多进程的模块信息,右键点击程序选择「以管理员身份运行」即可
- 部分轻量进程本身没有关联的可执行文件路径,读取不到Path属性属于正常情况
内容的提问来源于stack exchange,提问作者Sh3ewit
相关产品推荐
相关产品推荐

