dsh-auto-update:DSH Desktop 官方通道自動更新與更新後恢復

前言

DSH Desktop 走 electron-builder 的 app-update.yml 更新通道,常見做法是等主進程彈出更新對話框再確認安裝。對經常掛着對話、裝了一堆 profile 插件的開發者來說,手動點確認只是一半麻煩:升級後主程序換了版本,插件目錄、storages 和各類數據目錄若沒一併處理,容易出現設置回退不全或 bundle 狀態對不上的情況。

下面介紹的 dsh-auto-update 是維護者 zhkkjF 發佈的 Host + Web 插件(當前 package 版本 1.0.0,MIT 許可證)。它在讀取與官方相同的更新 feed 的前提下,自動檢查、校驗並安裝新版本,並在首次啓動新版本時按更新前快照恢復 profile、插件與相關數據目錄。

這是什麼

插件面向已打包的 DSH Desktop:依賴安裝目錄中的 app-update.yml 與 app.asar,在普通 dsh web 會話裏設置面板會提示「僅在 DSH Desktop 中可用」。社區目錄頁:SkillHub - dsh-auto-update;源碼與說明:GitHub zhkkjF/dsh-auto-update。

與官方「手動確認」更新的主要差別在確認與安裝環節:插件通過一次性 Windows 計劃任務先結束 Electron 主進程,再以與 electron-updater quitAndInstall(true, true) 一致的參數靜默跑 NSIS 安裝器,不經過主進程更新對話框。安裝過程中 DSH 會關閉並重新打開,進行中的對話會中斷;默認開啓「等待運行中的任務結束」,有對話回合或後臺任務時會推遲安裝。

核心功能

更新檢查

  1. 讀取 <resources>/app-update.yml 中的 feed 地址與 channel(支持 nightly / latest)。
  2. 請求 <url>/<channel>.yml,解析 version 以及安裝包的 url、size、sha512。
  3. 與 <resources>/app.asar/package.json 中的當前版本比較,判斷是否有新版本。

更新前快照

發現新版本並準備安裝時,在 $DSH_HOME/dsh-auto-update/snapshots/<timestamp>/ 創建快照,內容包括:

  • profile 側:package.json、cordis.patch.yml、pnpm-lock.yaml、pnpm-workspace.yaml、compatibility.json、.npmrc
  • storages/(插件設置存儲)
  • data/<插件目錄>/(默認包含 dsh-pet、dsh-market、skills-manager 等目錄,可在配置中修改)
  • manifest.json:版本、bundle 列表、依賴、禁用行

下載與校驗

安裝包流式下載到 $DSH_HOME/dsh-auto-update/downloads/,邊下載邊計算 SHA-512,僅在與 feed 中記錄一致後才用於安裝。

靜默安裝(Windows)

寫入 pending.json 後創建一次性計劃任務,由 Task Scheduler 服務執行(繞開仍在運行的 Host 插件進程,避免 NSIS 安裝器在應用未退出時異常退出,參見 electron-builder#8026):

  1. 等待 3 秒,覈對當前 Electron 主進程 PID 與可執行文件路徑。
  2. taskkill /PID <pid> /T /F,釋放安裝目錄佔用。
  3. 以 --updated /S --force-run 啓動安裝器,裝完後自動重新打開應用;任務結束時自行刪除。

新版本首次啓動後的恢復

插件若發現 pending.json 的 fromVersion 與當前版本不同,則:

  1. 從快照恢復 profile 文件、storages 與插件數據目錄(覆蓋前會把當前狀態備份到 <snapshot>/pre-restore-<timestamp>/)。
  2. 使用 Desktop 自帶的 pnpm 在 profile 目錄執行 pnpm install 重建 node_modules。
  3. 通過 Plugin Manager 服務補裝缺失或損壞的 bundle,恢復啓用與禁用狀態。
  4. 結果寫入 $DSH_HOME/dsh-auto-update/recovery.json,並在面板展示。

設置面板

路徑:設置 → 自動更新(settings.section,id auto-update)。面板提供狀態展示、自動更新開關、立即檢查/安裝、手動快照、重裝插件、恢復設置等操作。面板中的開關與檢查間隔會寫入 $DSH_HOME/dsh-auto-update/settings.json,優先於 cordis.patch.yml 中的默認值。

配置說明

默認配置在插件 bundle 的 cordis.patch.yml 中,常用字段如下:

字段 默認 說明
checkIntervalMinutes 30 自動檢查間隔(分鐘);0 表示關閉定時檢查
autoInstall true 發現新版本時自動下載並靜默安裝
autoInstallWhenIdle true 有運行中的任務時推遲安裝
snapshotKeep 5 保留最近幾份快照
restoreSettings true 更新後恢復 storages 與插件數據目錄
restorePolicy overwrite overwrite 覆蓋爲更新前設置;missing-only 只補缺失文件
dataDirs 見 README 需要一併備份/恢復的 $DSH_HOME 下插件數據目錄

示例片段(實際以倉庫內 cordis.patch.yml 爲準):

checkIntervalMinutes: 30
autoInstall: true
autoInstallWhenIdle: true
snapshotKeep: 5
restoreSettings: true
restorePolicy: overwrite

插件要求 DSH 引擎版本:>=0.2.1-rc.1 <0.2.2-0 或 >=0.2.2-rc.1 <0.3.0-0(見 package.json 中 engines.dsh)。

安裝與啓用

已抓取資料中未給出固定的 CLI 安裝命令字符串。可從社區目錄頁 SkillHub 或 GitHub 倉庫說明獲取與當前 DSH 版本一致的安裝方式;安裝前請閱讀源碼與 MIT 許可證,確認你願意以當前 DSH 進程權限運行該插件。

啓用後,在 DSH Desktop 打開 設置 → 自動更新 即可查看狀態並調整行爲。若 checkIntervalMinutes 大於 0 且開啓了自動安裝,插件會按間隔檢查官方 feed;也可在面板中手動觸發「立即檢查」或「立即安裝」。進行安裝前請先保存當前工作。

典型用法

  1. 日常靜默跟進 latest / nightly:保持默認 autoInstall: true 與 autoInstallWhenIdle: true,在有新版本且當前無運行中任務時自動完成下載與安裝,啓動後自動恢復插件環境。
  2. 大版本前先留底:在面板執行「手動快照」,確認 $DSH_HOME/dsh-auto-update/snapshots/ 下有新目錄後再允許自動或手動安裝。
  3. 更新後不想讓新默認值覆蓋手工改動:將 restorePolicy 設爲 missing-only,只補缺失文件,避免 overwrite 把更新前的 storages 寫回並覆蓋你在新版本里改過的同名設置。
  4. 安裝或恢復失敗:查看面板錯誤信息與 $DSH_HOME/dsh-auto-update/ 下的日誌與 recovery.json,必要時用保留的快照或面板中的「恢復設置」「重裝插件」嘗試修復。

適用場景與注意

適合需要長期在 Windows 上使用打包版 DSH Desktop、並希望跟進官方 app-update.yml 通道、同時儘量減少「升完版插件和環境要對半天」成本的開發者。

使用前請注意:

  • 僅支持存在 app-update.yml 與 app.asar 的 Desktop 打包環境;靜默安裝依賴 Windows 計劃任務,流程以 README 描述爲準。
  • 下載源與 app-update.yml 一致,僅接受 SHA-512 校驗通過的安裝包;狀態與日誌均在 $DSH_HOME/dsh-auto-update/,不寫 profile 之外的其他系統位置。
  • pnpm install 在 profile 目錄執行,失敗時面板會報錯並保留快照供手動處理。
  • 插件在 DSH 當前進程權限下運行,安裝前請自行審閱 GitHub 倉庫 源碼。DeepSeek Harness 社區插件目錄由 SkillHub 等站點維護,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-auto-update 把「讀官方 feed → 校驗安裝包 → 靜默裝 Desktop → 按快照恢復 profile 與插件」串成一條可配置的流水線,並把關鍵步驟暴露在設置面板裏。若你需要在 Desktop 上儘量少打斷工作地跟進 nightly 或 latest,可以結合 SkillHub 目錄說明安裝插件,再從 設置 → 自動更新 調整檢查間隔與恢復策略。

  • 目錄頁:https://www.skillhub.cn/plugins/zhkkjF/dsh-auto-update
  • GitHub:https://github.com/zhkkjF/dsh-auto-update
羽毛球分组比赛记分
小程序二维码

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

小夜