dsh-topbar-restart:DSH Windows 桌面端标题栏一键重启

前言

在 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)。

典型用法

  1. 完成安装并重启 DSH 桌面客户端(Windows)。
  2. 在标题栏右侧、最小化按钮左侧找到 ⏻ 重启。
  3. 单击一次,等待应用关闭并自动重新打开(约 4~6 秒)。
  4. 若异常,打开 %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 / 幻方,并非官方应用商店。

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

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

小夜