用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辅助编程工具
相关推荐
xxie1237949 分钟前
Python装饰器与语法糖阿昭L22 分钟前
数据库期末复习(三)CClaris24 分钟前
大模型量化从0到1(五):GPTQ 原理详解 + 从零量化一个真实大模型Railshiqian31 分钟前
UserPickerActivity 内部逻辑分析Dlrb121134 分钟前
信息查询Web服务器-->电子商城信息查询项目一tiao咸鱼37 分钟前
前端转 agent # 02 - FastAPI 框架入门与原理不会写DN38 分钟前
MySQL 并发插入竞态问题:原子写入实践指南霖霖总总1 小时前
[MongoDB小技巧24]MongoDB $lookup 聚合阶段深度解析:从入门到实战Yolo566Q1 小时前
Noah-MP陆面过程模型建模方法与站点、区域模拟实践技术应用挨踢诗人1 小时前
京东企业购 × 企业微信 采购闭环集成解决方案