前言¶
在 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)。
典型用法¶
- 完成安裝並重啓 DSH 桌面客戶端(Windows)。
- 在標題欄右側、最小化按鈕左側找到
⏻ 重啓。 - 單擊一次,等待應用關閉並自動重新打開(約 4~6 秒)。
- 若異常,打開
%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 / 幻方,並非官方應用商店。