用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辅助编程工具
相关推荐
wang_yb3 分钟前
用方差阈值过滤掉“惰性特征”数智化管理手记28 分钟前
主数据重复、错漏频发?一站式主数据管理平台如何落地?吴声子夜歌32 分钟前
MongoDB 4.2——选择片键天天进步一点点1 小时前
QSqlQuery删除sqlite数据库执行drop数据表报错database table is locked unable to fetch row问题音视频工程实战1 小时前
PromptQL 新手入门与实战指南清川渡水2 小时前
NL2SQL 的正确打开方式:从「AI 猜 SQL」到「置信度闭环」的工程化落地RFID固定资产管理系统2 小时前
公司RFID管理系统揭秘IVEN_2 小时前
Python官方包、Conda、uv,应该怎么选TDengine (老段)2 小时前
TDengine Go 与 Rust 连接器 — 高性能异步访问东方佑2 小时前
MA-RMSNorm:打破“缩放换智能”的魔咒,大模型归一化的一次范式革命!