dsh-titlebar-restart:在 DSH 標題欄菜單里加「重啓」

前言

做 DSH 桌面端開發或日常用時,改 profile 插件、調 Connection 路由之後,往往需要完整退出再打開一次客戶端,才能讓 bundle 掛載或新邏輯生效。從任務管理器結束進程再點開快捷方式,步驟多,也容易點錯別的 Electron 殼。

下面介紹社區插件 dsh-titlebar-restart(維護者 NyaNyaHua4290):僅在 Windows 上的 DSH 桌面版 生效,在窗口標題欄 應用 / 編輯 菜單後追加 重啓 項;連點兩次後,由 WMI 拉起的 PowerShell 結束當前主進程與 Host,再啓動同一個可執行文件,無需手改 Program Files 下的安裝目錄。

這是什麼

  • 名稱:dsh-titlebar-restart(npm 包名與插件市場標識一致)
  • 定位:客戶端向插件——一半改 Electron preload 繪製的標題欄菜單,一半在 Connection 上註冊重啓 API
  • 倉庫:github.com/NyaNyaHua4290/dsh-titlebar-restart,許可證 MIT;當前 package.json 版本 0.1.0,要求 Node 22+、dsh >= 0.2.1-rc.1
  • 市場分類(README):開發與運行時(dev)

標題欄菜單不在 Web 插槽體系裏,因此實現分成 宿主半 與 瀏覽器半,二者通過帶鑑權的 HTTP 協同。

核心功能

標題欄菜單項

瀏覽器半等待 preload 掛出 [data-windows-menu] 的開放 shadow root,在其中的 [role=menubar] 追加 <button role="menuitem">。樣式繼承 preload 自帶的 button 規則,視覺上與 編輯 一致。

交互爲二次確認:

  1. 第一次點擊:文案變爲 確認重啓
  2. 四秒內再點一次:變爲 重啓中…,併發起真正的 POST

宿主 API

宿主半在 Connection 通道註冊路由 POST /api/titlebar-restart(經 ctx.connection.fetch)。Connection 插件先做 Host/Origin 與會話 Cookie 校驗,未通過者無法到達本插件。

重啓流程

宿主寫出短 PowerShell,用 WMI Win32_Process.Create 拉起腳本,父進程爲 WmiPrvSE,從而能在結束當前進程樹之後仍執行完重啓邏輯:

  1. 等待約 0.9 秒,讓 HTTP 響應先返回瀏覽器
  2. 結束 Electron 主進程與本 Host
  3. 等待監聽端口釋放
  4. 重新啓動同一個可執行文件

整體約 3~4 秒。日誌與生成腳本目錄:%TEMP%\dsh-titlebar-restart\(restart.log、restart.ps1、launch.ps1)。若某次未能自動回到界面,可手動執行 restart.ps1 排查。

不修改 Program Files 下任何文件;屬於普通 profile 插件,桌面版升級不會覆蓋它。

非桌面環境的行爲

用 dsh web 起的服務沒有窗口與標題欄菜單,路由會返回 409 not-desktop,瀏覽器半保持靜默。macOS 與 Linux 不支持。

安裝與啓用

在 DSH 內:插件 → 發現 安裝,或在本機 profile 下執行:

dsh plugin --profile <profile> add dsh-titlebar-restart

若未從市場分發、需要直接從倉庫安裝(本機需有 git):

dsh plugin --profile <profile> add github:NyaNyaHua4290/dsh-titlebar-restart

安裝完成後 重啓一次 DSH,讓 bundle 掛載。

典型用法

  1. 確認當前是 Windows 上的 DSH 桌面版(非 dsh web 單獨起的無窗服務)。
  2. 安裝插件並重啓 DSH 後,打開任意帶標題欄菜單的窗口。
  3. 在標題欄 應用 / 編輯 區域找到 重啓,點一次進入確認,四秒內再點一次執行重啓。
  4. 重啓會中斷正在運行的一切(含當前對話);README 說明會話會落盤,重啓後自動恢復。

排查失敗重啓時,可查看 %TEMP%\dsh-titlebar-restart\restart.log,或嘗試運行同目錄下的 restart.ps1。

適用場景與注意

適合:經常在 Windows 桌面版上試驗 profile 插件、Connection 路由或需要「乾淨重啓同一 exe」的開發者與用戶。

務必注意:

  • 路由僅對持有 Web UI 會話 Cookie 的請求開放;未鑑權請求在 Connection 層被拒。
  • 僅當 Host 的父進程是 Electron 桌面殼時才執行結束進程;dsh web 場景不會去結束你的終端。
  • 點重啓會打斷所有進行中的任務;安裝與使用前宜閱讀倉庫源碼與 MIT 許可證。插件以當前 dsh 進程權限 運行,安裝前應自行覈對源碼與權限邊界。
  • 卸載:市場卸載或 dsh plugin remove;%TEMP%\dsh-titlebar-restart\ 可手動刪除。

結尾

dsh-titlebar-restart 把「結束並重啓同一桌面可執行文件」收進標題欄菜單,用 WMI 隔離腳本父進程,避免重啓邏輯隨當前進程一起被殺掉。若你主要在 Windows DSH 桌面版上迭代插件或配置,它比反覆從外部殺進程更省事。

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

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

小夜