READMESource: main@e442ff7c
DSHdesktop-restart-bottom
DSH 桌面端(DSH Desktop)左下角的一键重启按钮,位置紧贴账户按钮上边界,外观与账户按钮同一规格。
面向 DSH Desktop,不是
dsh web,也不是社区桌面端 。
为什么需要它
DSH 桌面端的宿主进程(Host)由 Electron 壳拉起,壳不会在 Host 死亡后自动重启(它只弹自己的恢复对话框),也没有暴露渲染进程到壳的重启通道。因此:
- 官方菜单里的「重启应用与 Host」只在开发构建(
!app.isPackaged)中出现,打包版没有; - 社区常见的自重启插件(如
dsh-restart、dsh-restart-button)只重启dsh宿主进程,在桌面端会留下一个没有宿主的窗口; - 插件市场
dshmarket在桌面端会把重启能力显式标为managedBy: 'desktop-host',即拒绝代管。
本插件补上这一块:由宿主的 HTTP 路由把重启交给一个脱离 Electron 进程树的独立 PowerShell 助手,由它杀掉应用进程树、等端口真正释放、再用同一个可执行文件把应用启动回来。
安装
桌面端 profile 名固定为 desktop(~/.dsh/profiles/desktop)。任选一种:
# 1) release 直链(推荐,无需 git)
dsh plugin --profile desktop add https://github.com/TixAn9/DSHdesktop-restart-bottom/releases/download/v1.0.0/dsh-desktop-restart-1.0.0.tgz
# 2) 从仓库源码安装
dsh plugin --profile desktop add github:TixAn9/DSHdesktop-restart-bottom
# 3) 从本地目录安装
dsh plugin --profile desktop add file:/绝对路径/dsh-desktop-restart
dsh plugin --profile desktop add link:/绝对路径/dsh-desktop-restart # 改动即时生效
也可以粘贴到桌面端自带插件管理器的安装框里。
tarball 直链由 npm pack 产出。可用 spec 形式(插件管理器的 parseInstallSpec 判定):
https://….tgz / https://….tar.gz、github:owner/repo、package@version、绝对路径目录、绝对路径 .tgz。
不支持 .zip 与相对路径。
安装后需要让页面重新加载一次 bundle 才会看到按钮(重开应用,或刷新页面)。
注意:不要用
--profile web。本插件声明dsh.client.platform: web指的是浏览器半的目标平台,桌面端同样加载它;装到 web profile 不会出现在桌面端。
使用
- 单击 → 变成「再次点击确认重启」(4 秒内有效)。重启会中断正在运行的任务,因此刻意做成两步,避免误触。
- 再次点击 → 执行重启。按钮转圈,并轮询服务;服务恢复后页面自动刷新。
- 若当前环境不支持(例如把它装到了浏览器端),按钮会置灰,悬停提示会说明原因。
实现要点
| 部分 | 说明 |
|---|---|
| 位置 | 注册到 sidebar.footer.action 列表槽位。侧边栏脚部 footArea 是纵向容器,依次渲染「动作区」和「账户按钮所在的 settings 区」,因此本槽位最后一行正好紧贴账户按钮上边界 —— 结构性对齐,不用绝对定位或运行时测量。 |
| 外观 | 与账户按钮同规格:height:44px、padding:6px、gap:8px、border-radius:var(--dsw-radius-md)、font-size:14px;前置 24×24 圆形徽标,底色 --dsw-alias-bg-skeleton、图形 --dsw-alias-label-tertiary,全部走主题变量。 |
| 重启 | POST /dsh-desktop-restart,仅接受环回地址 + 同源请求(复用 dshmarket 的判定规则,并把 Origin 按 authority 比较,以兼容桌面端 dsh-app://app 经壳转发、Origin 被改写的情形)。 |
| 助手 | 生成的 PowerShell 脚本写到临时目录,用 -File 以脱离模式启动。不能用分块的 -EncodedCommand:该参数只接受一份载荷,分块会让脚本只执行第一段。 |
| 自检 | 浏览器半没有可达的控制台,因此注册失败会把原因 POST 到 /dsh-desktop-restart/beacon,由宿主写进 %TEMP%\dsh-desktop-restart.log。 |
已知边界
- 重启会关闭并重新打开整个应用,正在运行的任务会中断。
- 助手通过
taskkill /F /T结束应用进程树(app.quit()的清理路径在强制结束时不会走完);若端口在等待窗口内始终未释放,助手会放弃启动,避免拉起第二个实例。 - 仅支持 Windows(助手使用
powershell.exe)。 - 插件包名是
dsh-desktop-restart,与仓库名不同,这不影响使用。
开发校验
仓库根目录带了三个自检脚本,用来在没有页面控制台的情况下验证两半:
node .check-client.mjs # bundle 契约:注册 id、inject、字典、slot 选项
node .check-host.mjs # 宿主路由:方法/环回/同源/转发头等授权判定
node .check-helper.mjs # 生成 PowerShell 助手并做语法解析
许可
MIT
No comments yet. Be the first to write one.