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 仓库 或 技能树目录。