前言¶
做 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 規則,視覺上與 編輯 一致。
交互爲二次確認:
- 第一次點擊:文案變爲 確認重啓
- 四秒內再點一次:變爲 重啓中…,併發起真正的 POST
宿主 API¶
宿主半在 Connection 通道註冊路由 POST /api/titlebar-restart(經 ctx.connection.fetch)。Connection 插件先做 Host/Origin 與會話 Cookie 校驗,未通過者無法到達本插件。
重啓流程¶
宿主寫出短 PowerShell,用 WMI Win32_Process.Create 拉起腳本,父進程爲 WmiPrvSE,從而能在結束當前進程樹之後仍執行完重啓邏輯:
- 等待約 0.9 秒,讓 HTTP 響應先返回瀏覽器
- 結束 Electron 主進程與本 Host
- 等待監聽端口釋放
- 重新啓動同一個可執行文件
整體約 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 掛載。
典型用法¶
- 確認當前是 Windows 上的 DSH 桌面版(非
dsh web單獨起的無窗服務)。 - 安裝插件並重啓 DSH 後,打開任意帶標題欄菜單的窗口。
- 在標題欄 應用 / 編輯 區域找到 重啓,點一次進入確認,四秒內再點一次執行重啓。
- 重啓會中斷正在運行的一切(含當前對話);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 桌面版上迭代插件或配置,它比反覆從外部殺進程更省事。