C#怎么判断进程是否在运行_C#如何管理系统进程【必备】

用Process.GetProcessesByName判断进程存在需注意:只匹配无后缀名、大小写建议小写、结果长度>0才存在;GetProcessById需捕获ArgumentException和InvalidOperationException;HasExited为false不保证进程正常响应,GUI进程应加Responding检查。怎么用 Process.GetProcessesByName 判断进程是否存在直接查进程名是最常用也最容易出错的方式。它不看路径、不看用户上下文,只匹配 process.processname(即去掉 .exe 后缀的名称),所以 notepad 能匹配 notepad.exe,但也会误匹配 notepad_plusplus.exe(如果名字含子串)。实操建议:始终用 Process.GetProcessesByName("chrome") 而不是 Process.GetProcessesByName("chrome.exe") ------ 后者会返回空数组检查结果长度:if (Process.GetProcessesByName("explorer").Length > 0),别用 != null,这个方法从不返回 null注意大小写:Windows 上通常不敏感,但某些容器或模拟环境可能敏感,建议统一用小写比对权限问题:跨用户进程(如系统服务启动的进程)在非管理员权限下可能查不到,Access denied 错误不会抛异常,而是直接不出现在结果里为什么 Process.GetProcessById 会抛 ArgumentException这不是"进程不存在"的信号,而是你传了个根本没用过的 PID,或者该 PID 曾经存在但已退出、被复用------Windows 的 PID 是可重用的,且重用前有短暂空窗期。常见错误现象:刚杀掉一个进程,立刻用它的 PID 去 GetProcessById,报 ArgumentException: The parameter is incorrect缓存了某个进程的 PID,几秒后去查,发现报错,其实进程早死了,PID 被新进程占用了正确做法是加 try-catch,并把 ArgumentException 和 InvalidOperationException(进程已退出)都视为"进程不可用":try { var p = Process.GetProcessById(pid); return !p.HasExited; // 注意:即使拿到对象,也要再 check HasExited} catch (ArgumentException) { return false;} catch (InvalidOperationException) { return false;}判断进程是否"真正运行中":不能只看 HasExited == falseHasExited 返回 false 只代表内核对象还在,不代表进程响应正常。比如 GUI 进程卡死、后台服务假死、或处于挂起状态,HasExited 依然为 false。使用场景决定你需要多深的探测: 文心快码 文心快码(Comate)是百度推出的一款AI辅助编程工具

相关推荐
lambo mercy2 小时前
AI智能租房助手
数据库
天天被压力2 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力2 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A2 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖3 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks3 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
浮生若城3 小时前
MySQL:库与表的操作
数据库·mysql
薛定谔的悦3 小时前
光储充一体机从主控到执行单元的双层架构
数据库·mongodb·架构
数字新视界3 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
csdn_aspnet3 小时前
Redis 入门:Windows、Mac安装指南
数据库·windows·redis·缓存·mac