dsh-restart-button: One-Click Restart for the DSH Desktop App

DSH 桌面应用在开发或运行过程中,有时需要重启才能解决配置生效、端口释放或崩溃恢复等问题。手动关闭窗口再双击图标不仅效率低下,还可能丢失当前状态。dsh-restart-button 通过在侧边栏底部添加一个按钮,实现了应用的一键重启与页面自动恢复。

这是一个由 FuriousKinght 维护的客户端插件。它利用 Node.js 辅助进程和 Windows 的 taskkill 命令,在打包后的桌面应用中强制重启进程树,并自动刷新页面。

核心功能

  • 侧边栏重启入口:在侧边栏底部添加一个重启按钮。
  • 自动页面刷新:DSH 重启完成后,页面会自动重新加载并恢复连接。
  • 两步确认机制:点击后进入 5 秒确认态,再次点击才执行重启,防止误触。
  • 强制终止进程:使用 taskkill /T /F 杀死整个进程树,确保旧进程彻底释放端口和资源。
  • 平台限制:仅支持 Windows 桌面版,不支持终端模式。

技术原理

DSH 桌面版基于 Electron。Electron 的 app.relaunch() 仅在开发模式下可用,且 Host 到 Electron 的 IPC 通道不包含“重启”消息。因此,插件必须从外部重启。

为了防止杀掉主进程后子进程(Host)变成孤儿并占用端口,插件通过 WMI 创建了一个父进程为 WmiPrvSE.exe 的 Node.js 助手进程。该助手进程在后台执行 taskkill /T /F 杀死整棵进程树后,再重新启动可执行文件。页面通过对比进程 Token 来判断何时刷新。

安装与启用

安装前请确保已安装 DSH 0.2.0-rc.2 或更新版本。

node tools/install.mjs --profile desktop     # 安装
node tools/uninstall.mjs --profile desktop   # 卸载

代码层通过 cordis.patch.yml 热加载,但运行中的进程缓存了旧代码,首次激活通常需要重启一次 DSH。

验证

node verify/verify-install.mjs     # 浏览器端校验
node verify/verify-relaunch.mjs    # 助手进程存活校验

注意事项

  • 版本要求:必须使用 DSH 0.2.0-rc.2 或更新版本。旧版本会拒绝安装。
  • 不可配置:插件未提供设置命名空间。
  • 运行环境:仅在打包后的桌面应用中有效。如果在终端运行 dsh web,插件会尝试杀死 Shell,导致终端关闭。

总结

该插件解决了 DSH 桌面应用重启流程繁琐的问题,通过底层进程管理确保了重启的可靠性。更多细节可参考 GitHub 仓库 或 技能树目录。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye