Repository navigation
v1.2.7
修复内容
🐛 根因修复:Clash Verge Rev 的服务会立刻拉起被关闭的主进程
症状:用户反馈「点确认后 Clash 依旧存在,并没有关闭」——导入按钮的关闭步骤看似没生效。
根因(实测复现):
- Clash Verge Rev 后台有
clash-verge-service.exe常驻 - 之前的
close_and_wait只 killprocesses字段的主进程,不动 service_processes - 服务检测到主进程退出后立刻拉起 → 写入 profiles.yaml 仍被新进程覆盖
- 之前的代码还会在「调用方明确传入要 kill、但实际什么都没杀掉」时静默返回 True,
把矛盾吞掉让用户看不到任何反馈
这正是 v1.1.1 时已经出现过的同一个 bug 的根因再现。
修复
-
clashctl.close_and_wait新增kill_service参数:False(默认):不动 service_processes(普通场景)True:把 service_processes 也加入 kill 目标(导入订阅这种"必须让 Clash 完全退出"的场景)
-
修复静默吞矛盾:当调用方明确传入
kill_service=True但一个都没杀掉时,
返回(False, ...)而不是(True, "未检测到..."),让上层弹窗告诉用户问题所在 -
清晰的错误消息:杀 Windows 服务需管理员权限。失败时会明确提示
「请以管理员身份运行本工具」 -
ui._import_worker在导入场景显式传kill_service=True——导入订阅时,
服务必须一起杀,否则服务会立刻拉起主进程。
验证
- 冒烟测试
_scratch/smoke_close_service.py实测复现了根因并验证修复路径:
旧版本静默返回 True;新版本返回 False + 明确提示管理员权限 - 全模块
py_compile通过 - exe 启动存活测试通过
用户操作建议
如果之前导入反复失败,**请右键 clash-subscope.exe →「以管理员身份运行」**再导入。