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 / 幻方,並非官方應用商店。

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

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

小夜