用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辅助编程工具
相关推荐
NaMM CHIN2 小时前
MySQL无法连接到本地localhost的解决办法2024.11.8Irene19912 小时前
PL/SQL:变量使用 两个连续的外部输入 注意事项Jetev2 小时前
golang如何实现审计日志记录_golang审计日志记录实现教程yexuhgu2 小时前
Redis如何解决哨兵通知延迟问题_优化客户端连接池动态刷新拓扑的订阅监听机制洛水水2 小时前
Redis 协议与异步通信深度解析盼小辉丶2 小时前
PyTorch强化学习实战(5)——PyTorch Ignite 事件驱动机制与实践landyjzlai12 小时前
蓝迪哥玩转Ai(8)---端侧AI:RK3588 端侧大语言模型(LLM)开发实战指南S1998_1997111609•X13 小时前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.我叫黑大帅13 小时前
如何通过 Python 实现招聘平台自动投递