一、先确认退出的是窗口,还是代理内核

窗口消失,不一定就是程序崩溃。Clash 类客户端通常包含图形界面和代理内核两部分:前者负责按钮、配置列表和设置,后者负责实际接收连接、执行规则。mihomo 是部分客户端使用的代理内核,也常被称为 Clash Meta。两部分可以分别出问题,排查时先分清对象。

  1. 看系统托盘是否还有客户端图标。Windows 的图标可能藏在任务栏的折叠区域;如果图标仍在,先从托盘重新打开主窗口,检查是否启用了启动后最小化。
  2. 按 Ctrl + Shift + Esc 打开任务管理器,在「详细信息」中查看客户端及其内核进程。记录进程名,不要只凭图标判断。
  3. 如果窗口能打开,但显示内核未运行,优先查内核日志;如果图形界面进程也立即消失,优先查客户端日志与系统崩溃记录。
  4. 退出其他代理客户端,再启动一次出问题的客户端。两套程序同时启动,可能争用本地端口或虚拟网卡。

二、定位日志:保留启动前后的第一条错误

日志位置取决于客户端,不取决于“Clash”这个统称。安装目录、用户数据目录和内核工作目录可能是三个位置。不要从网上复制某个文件夹路径后,就认定自己的日志一定在那里。

窗口还能停留几秒时

优先使用客户端设置中的“打开日志目录”或“打开配置目录”入口;名称和层级随客户端变化。打开后复制整个日志目录,并记录启动时间,例如 09:42:10。随后重新启动一次,查看这个时间之后新增的日志,而不是反复阅读上一次的旧错误。

窗口完全打不开时

日志先看第一条导致启动中断的错误,再看前后各 20 行。末尾的“连接被拒绝”可能只是内核已经退出的结果。故障模块指向图形运行时,也不能直接证明是显卡驱动问题,需要结合客户端日志判断。

日志线索优先检查下一步
address already in use监听端口被占用查询占用进程,不急着重装
yaml、unmarshal配置结构或字段类型测试实际加载的配置文件
no such file、not found内核或所需资源不存在确认报错路径和安装内容
permission denied目录、执行权限或服务权限检查当前账户与目录权限
access is denied权限、端口排除或安全拦截结合完整错误判断,不能一律当成占用

三、端口占用:查清 7890 和 9090 的使用者

端口冲突通常影响内核启动,不一定让整个界面闪退。7890 常被用作本地代理端口,9090 常被用作控制接口端口,但它们都能修改。请以日志和当前配置为准;如果报错写的是 7897,就查询 7897。

在 Windows PowerShell 中执行下面的命令,查看示例端口的 TCP 监听者。没有输出只表示查询时没有对应监听,并不能排除进程刚刚退出。

Get-NetTCPConnection -State Listen -LocalPort 7890,9090 -ErrorAction SilentlyContinue |
  Select-Object LocalAddress,LocalPort,OwningProcess

假设输出中的进程编号是 4321,再查询进程身份。这里的 4321 是演示数值,执行时应换成查询到的编号。

Get-Process -Id 4321 | Select-Object Id,ProcessName,Path
  1. 若占用者是另一套代理工具,从它的托盘菜单正常退出,避免直接终止未知系统进程。
  2. 若占用者是同一客户端的残留内核,先退出客户端及其后台服务,确认没有正在使用它的连接,再处理残留进程。
  3. 确实需要两套程序共存时,可以把其中一套的代理端口改为未占用的 7893,控制端口改为未占用的 9093。同时更新应用手动填写的代理地址,不能只改配置而保留旧端口。

如果没有监听者,但 Windows 报端口访问被拒绝,可以用 netsh interface ipv4 show excludedportrange protocol=tcp 查看 TCP 排除端口范围。不要直接删除系统保留范围,先选择范围外的空闲端口。UDP 绑定错误则需另外检查 UDP 端点,不能仅凭 TCP 查询下结论。

四、配置回滚:先测 YAML,再找客户端合并层

回滚应恢复整份可用配置,而不是随机删字段。YAML 是用缩进表示层级的文本格式。混入制表符、把数字写成错误类型、引用不存在的策略组,都可能使配置加载失败。订阅能下载成功,也不代表下载内容一定适合当前内核。

按最近一次变更缩小范围

用当前内核进行配置测试

mihomo 的 -t 用于测试配置后退出,-f 指定配置文件,-d 指定工作目录。下面假设已把当前客户端配套的内核和待测配置放入 D:\ClashRecovery,文件名分别为 mihomo.exe 与 candidate.yaml;实际路径不同就相应调整。

Set-Location 'D:\ClashRecovery'
.\mihomo.exe -t -d 'D:\ClashRecovery' -f 'D:\ClashRecovery\candidate.yaml'

工作目录可能还需要地理数据或规则资源。提示资源缺失时,应先补齐与当前配置匹配的资源,不能直接归因为缩进错误。测试通过也只说明该内核能加载这份配置,不保证节点可连接、远程规则可下载,更不保证图形界面一定正常。

五、内核缺失、架构不符与运行环境错误

只有日志明确指向文件或加载失败时,才处理程序文件。“内核未运行”也可能由配置错误造成,不等于内核文件丢了。先核对错误中的完整路径,再检查文件是否存在、是否被移动,以及当前用户是否有读取和执行权限。

核对安装包与设备架构

Windows 可在「设置」→「系统」→「系统信息」查看系统类型;Linux 可运行 uname -m。x64 与 ARM64 安装包应按设备和客户端支持情况选择。不要把另一款客户端的内核直接改名覆盖,因为启动参数、控制接口和配套资源可能不同。

按安全记录和依赖提示处理

如果普通模式可以启动,只有启用 TUN 才失败,应转向检查虚拟网卡、服务安装状态和权限。暂时关闭 TUN 进行对照,不要把“始终以管理员运行”当作所有闪退的通用修复。

六、安全重装:分开验证程序与用户数据

重装前保留数据,重装后不要立刻全部恢复。只覆盖安装文件,可能保留造成故障的用户设置;直接删除整个数据目录,又可能丢失本地规则和订阅记录。更稳妥的做法是备份、隔离、逐项恢复。

  1. 记录现场:保存客户端名称与版本、内核版本、操作系统版本、最后一次成功启动时间,以及刚做过的更新或配置变更。
  2. 备份数据:在程序和相关服务完全退出后,复制配置、订阅记录、本地规则、覆写脚本和日志。备份含有凭据,应放在受保护的本地目录。
  3. 隔离旧目录:确定实际用户数据目录后,将它重命名为带日期的备份目录,例如在原名称后添加 -backup-20261015。若仍被占用,先解决后台进程,不要强行删除。
  4. 重新安装:按客户端文档卸载程序;涉及服务模式时,按项目说明卸载对应服务。安装与设备架构匹配的稳定版本,不要跨项目混装程序文件。
  5. 先空白启动:确认新实例使用新的数据目录,在不恢复旧订阅、脚本和 TUN 设置的情况下打开窗口。有些客户端没有选中配置时不会启动内核,这与界面闪退是两回事。
  6. 逐项恢复:先导入一份已知可用配置,启动并查看日志;随后恢复本地规则、覆写、系统代理和 TUN。每次只改一项,便于定位触发条件。

如果空白数据也闪退,排查重点应转向系统兼容性、运行时、安装完整性或客户端自身缺陷。如果空白数据正常、恢复旧数据后复现,就保留新目录,分批恢复旧内容,不要把整个备份直接覆盖回去。

七、修复后的验证与求助信息

能看见窗口只是第一步,还要确认配置和连接恢复。保持客户端打开 2 分钟,查看内核是否反复重启;检查当前选中的配置、代理模式和策略组是否正确。规则模式会按规则选择连接方式,因此某个网站直连不一定表示代理失效。

整个排查顺序可以保持简单:先确认退出对象,再读日志;有端口错误就查端口,有配置错误就回滚配置,有文件错误再处理安装。每一步保留可恢复的备份,通常比连续重装更容易找到真正的触发点。