# 更新机制 dsh-piggy 桌面版由两层组成,因此更新方式也分两种。 ## 游戏包 根目录 `package.json` 的版本号是游戏版本,例如 `0.26.0`。规则、界面、立绘和大多数功能都在游戏包里。桌面版可以从 Release 下载压缩包,校验 SHA-256 后切换,不需要替换 EXE。切换前会备份存档,并保留上一个游戏包用于回退。 DSH 插件不能安全地重写用户本地仓库,所以它只显示新版本提醒和发布页链接。用户仍通过 Git 拉取或重新安装插件更新。 ## 桌面外壳 `apps/desktop/package.json` 的版本号是外壳版本,例如 `0.3.0`。外壳负责 Electron、窗口、托盘、预加载桥和本地更新器。Windows EXE、Linux AppImage 和 macOS App 都属于这一层。 从外壳 v0.3.0 起,窗口摆放、可点区域、鼠标穿透、桌面样式等逻辑都在游戏包里(见开发文档「桌面程序和游戏包怎么分工」),外壳只提供基础动作。窗口类的修复通常只需要更新游戏包,外壳很少再需要升级。 「设置 → 更新」会分别显示**游戏版本**和**桌面外壳版本**。版本按正式版分组,测试版收在对应正式版下面、默认折叠,只能手动安装;红点和「更新到最新」只看正式版。游戏版本升级沿用下载、校验、备份存档和回退;外壳版本升级负责窗口、托盘等系统功能。从外壳 v0.2.0 起,支持以下方式: | 安装方式 | 外壳更新 | | --- | --- | | Windows 安装版(setup.exe) | 在更新 App 下载,完成后点击“重启并安装” | | Linux AppImage | 在更新 App 下载,完成后点击“重启并安装”;AppImage 所在目录需可写 | | Windows 便携版(portable.exe) | 更新 App 说明原因并打开发布页;下载后替换旧 EXE | | macOS 未签名 DMG | 更新 App 说明尚未签名并打开发布页;下载后替换应用 | 此前发布的外壳 v0.1.x 没有安装器更新功能,仍需**手动覆盖安装一次**带新更新器的版本。此后支持的安装方式才能在 App 内升级外壳。存档位于系统应用数据目录,不在可执行文件中,正常覆盖不会清空猪。 Release 的游戏清单包含两个外壳字段: - `minShell`:运行该游戏包所需的最低外壳版本,低于它时禁止热更新。 - `shellVersion`:发布该游戏包时推荐的外壳版本。更新页只在「新版游戏需要更高外壳」时醒目提示,否则只显示一行可选更新;普通玩家的版本列表不显示预览版。 发版时,外壳有改动就先提高 `apps/desktop/package.json` 的版本,再和游戏包一起打包。Windows 安装版的 `latest.yml`、Linux AppImage 的 `latest-linux.yml` 必须和对应安装包上传到**同一个游戏版本标签**的 GitHub Release;更新器用这些清单核验安装包。游戏包没有外壳改动时,外壳版本号保持不变。