dsh-desktop-tray 插件介紹

前言

DSH Desktop 是一個基於 Electron 的應用。插件運行在獨立的 Node 進程中,而系統托盤功能通常需要修改主進程代碼。該插件通過代碼注入的方式,爲 DSH Desktop 提供了系統托盤支持,包括最小化到托盤、關閉時隱藏以及應用更新後的自愈恢復能力。

插件簡介

dsh-desktop-tray 是一個爲 DSH Desktop 提供系統托盤支持的客戶端插件。它由 wodongx123 維護,許可證爲 MIT。

安裝與啓用

通過 DSH Desktop 的插件市場安裝,或在 web profile 中直接添加:

dsh plugin --profile web add github:wodongx123/dsh-desktop-tray

安裝後需要重啓 DSH Desktop(不是隻重啓 Harness)。首次啓動時插件會自動進行注入。

核心功能

  • 最小化到托盤:點擊最小化按鈕時隱藏到托盤,而不是任務欄。
  • 關閉時隱藏:關閉窗口時保持後臺運行(默認開啓)。
  • 立即隱藏:一鍵隱藏主窗口。
  • 托盤交互:左鍵單擊/雙擊顯示主窗口,右鍵菜單顯示主窗口或退出。
  • 設置界面:設置 → 系統托盤(中英文雙語)。
  • 代碼注入管理面板:從 0.2.0 起支持,可在設置頁查看注入情況、開始/取消注入、確認編譯效果。

工作原理

由於 DSH Desktop 是 Electron 應用,托盤只能在主進程創建,而插件運行在獨立進程無法直接調用 Electron API。該插件採用“啓動時自愈注入”機制:

  1. 應用啓動時加載 tray-boot.js 啓動器。
  2. 啓動器讀取插件內的補丁定義,檢查主進程文件(out/main/index.js、out/preload/index.cjs)是否已注入。
  3. 未注入時,按錨點注入代碼,並備份原文件爲 *.dsh-tray.bak。
  4. 已注入時跳過(冪等操作)。

更新自愈:應用更新會覆蓋 resources/app 目錄,清除注入內容。插件本體安裝在 AppData 中,應用更新不會刪除。下次啓動 DSH Desktop 時,插件會自動重新注入代碼,恢復托盤功能。

安全設計

插件採用了五重防護機制防止重複注入和破壞文件:
1. 冪等標記:已帶標記的文件不再改動。
2. 錨點消費:注入即錨點替換,錨點被消費後無法二次疊加。
3. 內容檢測:無標記但內容已存在,僅補標記。
4. 整體原子性:任一錨點失配,整文件不寫。
5. 備份 + 原子寫:注入前備份,使用臨時文件 + 重命名方式寫入。

注意事項

  • 破壞性修改:該插件會修改 DSH Desktop 的主程序文件(resources/app/out/main/index.js、out/preload/index.cjs、package.json),屬於破壞性修改,不是純只讀插件。
  • 還原方法:如果 DSH Desktop 無法啓動,可按順序還原備份文件並恢復 package.json 的 main 指向。
  • 依賴:需要 @deepseek-ai/cordis (^4.0.1) 和 @deepseek-ai/dsh-host-webserver (^0.1.0-rc.6)。

卸載

  1. 移除插件:dsh plugin --profile web remove dsh-desktop-tray,並刪除配置文件中的對應條目。
  2. 手動恢復應用文件(如果不再需要托盤):
    • 修改 resources/app/package.json,將 main 改回 "./out/main/index.js"。
    • 刪除 resources/app/out/main/tray-boot.js。
    • 使用備份文件(*.dsh-tray.bak)覆蓋還原對應文件。

參考資料

  • 插件目錄:https://www.skillhub.cn/plugins/wodongx123/dsh-desktop-tray
  • GitHub 倉庫:https://github.com/wodongx123/dsh-desktop-tray
羽毛球分组比赛记分
小程序二维码

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

小夜