Skip to content

v1.2.7

Choose a tag to compare

@cv-superding cv-superding released this 01 Sep 05:35
· 6 commits to main since this release

修复内容

🐛 根因修复:Clash Verge Rev 的服务会立刻拉起被关闭的主进程

症状:用户反馈「点确认后 Clash 依旧存在,并没有关闭」——导入按钮的关闭步骤看似没生效。

根因(实测复现):

  • Clash Verge Rev 后台有 clash-verge-service.exe 常驻
  • 之前的 close_and_wait 只 kill processes 字段的主进程,不动 service_processes
  • 服务检测到主进程退出后立刻拉起 → 写入 profiles.yaml 仍被新进程覆盖
  • 之前的代码还会在「调用方明确传入要 kill、但实际什么都没杀掉」时静默返回 True,
    把矛盾吞掉让用户看不到任何反馈

这正是 v1.1.1 时已经出现过的同一个 bug 的根因再现。

修复

  1. clashctl.close_and_wait 新增 kill_service 参数:

    • False(默认):不动 service_processes(普通场景)
    • True:把 service_processes 也加入 kill 目标(导入订阅这种"必须让 Clash 完全退出"的场景)
  2. 修复静默吞矛盾:当调用方明确传入 kill_service=True 但一个都没杀掉时,
    返回 (False, ...) 而不是 (True, "未检测到..."),让上层弹窗告诉用户问题所在

  3. 清晰的错误消息:杀 Windows 服务需管理员权限。失败时会明确提示
    「请以管理员身份运行本工具」

  4. ui._import_worker 在导入场景显式传 kill_service=True——导入订阅时,
    服务必须一起杀,否则服务会立刻拉起主进程。

验证

  • 冒烟测试 _scratch/smoke_close_service.py 实测复现了根因并验证修复路径:
    旧版本静默返回 True;新版本返回 False + 明确提示管理员权限
  • 全模块 py_compile 通过
  • exe 启动存活测试通过

用户操作建议

如果之前导入反复失败,**请右键 clash-subscope.exe →「以管理员身份运行」**再导入。