Agent Skills
返回列表
💻

Windows 守护 GUI 单文件打包器

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_9aa69e66/pyinstaller-win-gui 到当前 AI 助手。

技能介绍

要解决的问题

把「一个 Python 服务 + 一个看门狗」变成一个能双击运行的 Windows 单文件 GUI,常见翻车点集中在四处:

  • 打包后多进程困惑:PyInstaller 单文件模式会产生引导外壳进程和应用进程,任务管理器里看到两个同名 exe 是正常现象。
  • 多实例互杀:保活逻辑里无脑 taskkill /F /IM cloudflared.exe 先杀全部同类进程,一旦两个管理器并存就会互相拆台,引发隧道重启风暴。
  • 隐蔽认证失败:令牌文件带 UTF-8 BOM 时,用 open(encoding='utf-8') 会把三个不可见字节混进令牌,表现为 Cloudflare 报 token invalid、公网 502/530 抖动。
  • 状态脱节:管理器重启或多实例后,内存布尔 self.running 与真实进程不一致,点「停止系统」直接走"未运行"分支,根本没杀进程。

核心能力

  • 纯标准库实现:GUI 用 tkinter,保活用 threading + subprocess,配置读写用 json / winreg,不引入第三方依赖,打包体积小、运行稳。
  • 单文件窗口打包:--onefile --windowed 产出双击即用的窗口 exe,不带控制台黑框。
  • 端口互斥防多开:占用一个本地 TCP 端口当互斥锁,比文件锁干净,重复双击或开机自启第二份会被静默拦截。
  • 真实进程保活:保活前先 detect_running() 确认真实状态,只在"进程缺失 / 公网不可达且冷却已过"时才重启,绝不无脑 kill 全部。
  • 令牌 BOM 防护:统一用 utf-8-sig 读令牌和配置文件,可搭配 PowerShell 检查文件头三个字节是否为 0xEF,0xBB,0xBF。
  • 开机自启:写入 HKCU\...\Run 注册表项,值带 --minimized,无需管理员权限且开机不弹窗。
  • 关窗即最小化:点 × 不销毁保活线程,改最小化到任务栏;另设「退出管理器」和「停止系统」两个语义明确的按钮。
  • 独立打包 venv:pyinstaller 装在独立 venv 里,不污染被守护服务的运行环境。

适用边界与注意点

  • 管理器只负责「启动 / 停止 / 看护」既有服务脚本,升级服务代码无需改动管理器本身。
  • 精确清理进程依赖按命令行匹配的 Get-CimInstance 方式,不要用 netstat 解析 LISTENING 的 PID,曾因此误杀主进程。
  • 本技能配套 win-powershell-envfix 处理 Start-Process 因 PATH 双键折叠而崩溃的坑。
  • 停止逻辑的正确闸门是「内存标志未运行 且 真实进程都不在」才报未运行,否则按名称清理。

使用场景

  • 要把带看门狗的 Python 服务打包成双击即用的单文件 GUI,并配置开机自启与关窗保活。
  • 已有保活脚本会无脑杀掉同类进程,需要改成按真实进程检测,避免多管理器互杀隧道。
  • 隧道令牌文件带 BOM 导致认证失败,需要统一用 utf-8-sig 读取并验证文件头字节。
  • 管理器用内存布尔判断状态,停止按钮失效,需要改成基于真实进程检测的停止闸门。

适合人员

  • 需要把 Python 服务连同看门狗打包成 Windows 单文件 GUI 并保持长开不中断的开发者
  • 负责 SCADA 监控管理器维护,需要处理开机自启、单实例和关窗保活的 Windows 运维工程师
  • 在 Windows 上做本地守护工具,担心多实例互杀和进程状态脱节的桌面应用作者
  • 需要修复令牌 BOM 认证失败和停止按钮失效问题的 IT 支持或现场调试人员