dsh-restart-button:一鍵重啓 DSH 桌面應用

DSH 桌面應用在開發或運行過程中,有時需要重啓才能解決配置生效、端口釋放或崩潰恢復等問題。手動關閉窗口再雙擊圖標不僅效率低下,還可能丟失當前狀態。dsh-restart-button 通過在側邊欄底部添加一個按鈕,實現了應用的一鍵重啓與頁面自動恢復。

這是一個由 FuriousKinght 維護的客戶端插件。它利用 Node.js 輔助進程和 Windows 的 taskkill 命令,在打包後的桌面應用中強制重啓進程樹,並自動刷新頁面。

核心功能

  • 側邊欄重啓入口:在側邊欄底部添加一個重啓按鈕。
  • 自動頁面刷新:DSH 重啓完成後,頁面會自動重新加載並恢復連接。
  • 兩步確認機制:點擊後進入 5 秒確認態,再次點擊才執行重啓,防止誤觸。
  • 強制終止進程:使用 taskkill /T /F 殺死整個進程樹,確保舊進程徹底釋放端口和資源。
  • 平臺限制:僅支持 Windows 桌面版,不支持終端模式。

技術原理

DSH 桌面版基於 Electron。Electron 的 app.relaunch() 僅在開發模式下可用,且 Host 到 Electron 的 IPC 通道不包含“重啓”消息。因此,插件必須從外部重啓。

爲了防止殺掉主進程後子進程(Host)變成孤兒並佔用端口,插件通過 WMI 創建了一個父進程爲 WmiPrvSE.exe 的 Node.js 助手進程。該助手進程在後臺執行 taskkill /T /F 殺死整棵進程樹後,再重新啓動可執行文件。頁面通過對比進程 Token 來判斷何時刷新。

安裝與啓用

安裝前請確保已安裝 DSH 0.2.0-rc.2 或更新版本。

node tools/install.mjs --profile desktop     # 安裝
node tools/uninstall.mjs --profile desktop   # 卸載

代碼層通過 cordis.patch.yml 熱加載,但運行中的進程緩存了舊代碼,首次激活通常需要重啓一次 DSH。

驗證

node verify/verify-install.mjs     # 瀏覽器端校驗
node verify/verify-relaunch.mjs    # 助手進程存活校驗

注意事項

  • 版本要求:必須使用 DSH 0.2.0-rc.2 或更新版本。舊版本會拒絕安裝。
  • 不可配置:插件未提供設置命名空間。
  • 運行環境:僅在打包後的桌面應用中有效。如果在終端運行 dsh web,插件會嘗試殺死 Shell,導致終端關閉。

總結

該插件解決了 DSH 桌面應用重啓流程繁瑣的問題,通過底層進程管理確保了重啓的可靠性。更多細節可參考 GitHub 倉庫 或 技能樹目錄。

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

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

小夜