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
羽毛球分组比赛记分
小程序二维码

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

小夜