前言¶
在 DSH 桌面端里改插件、调 Host 或换 profile 之后,往往需要整应用退出再开一次,才能让加载顺序和进程状态对齐。Windows 上可以用托盘或任务管理器结束进程再手动点开 exe,步骤分散,也容易漏掉子进程。下面介绍社区插件 dsh-topbar-restart:在桌面客户端标题栏增加一个「重启」按钮,一次点击结束整棵进程树并重新拉起同一个可执行文件。
这是什么¶
dsh-topbar-restart 由维护者 Re-qi 发布,分类为客户端插件,npm 包名同为 dsh-topbar-restart,当前版本 1.0.3,许可证 MIT。它解决的是:在 DSH 桌面端(Windows) 标题栏、原生最小化按钮左侧,提供 ⏻ 重启 入口;点击后关闭 DSH,再自动启动同一个应用。浏览器里打开同一 Web UI 时不渲染该按钮(无标题栏、也无本地进程可重启)。
核心功能¶
按钮位置与文案¶
- 标题栏 40px 条带内,紧挨原生最小化 / 最大化 / 关闭按钮左侧(约 8px 间距);全屏时原生按钮消失,按钮自动贴到右侧 12px。
- 文案跟随 DSH 语言设置:中文「重启」,英文 “Restart”。
一次点击在做什么¶
全程约 4~6 秒:结束整棵进程树(主进程、Host 子进程、渲染 / GPU / utility、插件拉起的子进程)→ 等待端口释放 → 重新启动同一个 exe。
实现上,页面通过 POST /__dsh-topbar-restart/restart 触发;Host 校验是否在桌面客户端、execPath 是否为应用、父进程是否为窗口主进程后,经 lib/spawn-detached.ps1 在进程树外创建 lib/restart.cmd 助手(等待 2s → taskkill /PID <主进程> /T /F → 进程消失后 start 同一 exe)。插件跑在 Host 子进程里,不能直接对自己 taskkill /T,因此助手必须用 Win32_Process.Create 挂在进程树外;助手采用 .cmd 而非 .ps1,是为规避部分 HIPS / 脚本防护对 WMI 拉起 PowerShell 的拦截。
诊断与反馈¶
- 步骤写入
%TEMP%\dsh-topbar-restart.log,窗口关闭后仍可查看。 - 探针路由(不杀进程):
GET /__dsh-topbar-restart/restart查看是否支持及平台;POST /__dsh-topbar-restart/restart?dry=1,请求头x-dsh-topbar-restart: restart仅返回计划。 - 失败时按钮会显示原因(如「重启失败 (launcher-failed)」);20 秒内未关闭则恢复可点并提示「重启没有生效:应用仍在运行」。
兼容性说明¶
README 记载在 DSH 0.2.1-rc.3 桌面端实测通过;插件仅使用 webServer.register、ctx.slots、ctx.locale 与 shell.overlay 槽位,未依赖其他插件的 DOM。
安装与启用¶
插件市场(推荐)¶
设置 → 插件 → 市场 → 搜 dsh-topbar-restart → 添加。包已发布到 npm 并带有 dsh-plugin topic,市场可读清单并安装;有 npm 包时走 registry 通道。装完后重启 DSH。
命令行¶
若 profile 名不是默认的 desktop,把 --profile 换成你的 profile 名:
dsh plugin --profile desktop add dsh-topbar-restart
手动安装¶
无 npm 时市场可能降级到 GitHub Release 或 git 克隆并在 profile 里写 link:。等价手动步骤见仓库 README(克隆到 ~/.dsh/plugins-src/dsh-topbar-restart,在 profile 的 package.json 增加 dependencies 与 dsh.profile.bundles 条目后重启 DSH)。
典型用法¶
- 完成安装并重启 DSH 桌面客户端(Windows)。
- 在标题栏右侧、最小化按钮左侧找到
⏻ 重启。 - 单击一次,等待应用关闭并自动重新打开(约 4~6 秒)。
- 若异常,打开
%TEMP%\dsh-topbar-restart.log,或用GET /__dsh-topbar-restart/restart确认环境是否支持。
卸载:在插件页关闭或卸载 dsh-topbar-restart,按钮与 Host 路由一并移除。
适用场景与注意¶
适合谁:经常在 Windows 桌面端调试 DSH、改插件 bundle 或 Host 行为,需要「整应用硬重启」而不是只刷新页面的开发者。
边界与取舍(来自官方 README):
- 仅 Windows 桌面客户端;其他平台或纯浏览器访问时路由返回 501,按钮不显示。
- 强制结束(
taskkill /F),无「还有任务在跑」确认;已落盘数据一般不受影响,流式写入中的最后一条可能被截断,与任务管理器结束进程类似。 - 重新拉起只重放 exe 本身,不会重放启动时的额外命令行参数,也不会重跑
start-dsh.bat里的 cookie 清理等逻辑。 - 桌面外壳未向页面开放
app.relaunch()类 IPC,本插件用独立助手完成重启。
安全与权限:插件以当前 DSH 进程权限运行,安装前请阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的环境策略。
结尾¶
dsh-topbar-restart 把「关进程 + 再开 exe」收成标题栏一次点击,并针对 Electron / Host 进程树结构做了进程外助手与诊断日志。社区插件目录独立于 DeepSeek / 幻方,并非官方应用商店。