RPCS3 自动更新机制详解:3 行门槛逻辑决定你是否会看到更新提示
2026/9/10 12:34:30 网站建设 项目流程

RPCS3 自动更新机制详解:3 行门槛逻辑决定你是否会看到更新提示

【免费下载链接】rpcs3PlayStation 3 emulator and debugger项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3

本文沿 RPCS3 自动更新 的真实调用链,从触发时机、版本检测、包校验讲到分平台安装,并给出配置查哪里、坏了查哪条日志。读完能回答一个问题:为什么你的机器会自动更新,而别人的从来只弹"已是最新"。

自动检查到底从哪里开始

自动触发点只有一个:主窗口show()。窗口第一次显示时最多执行一次,行为由 gui_settings.h 中Meta组的checkUpdateStart一项决定(即设置对话框里的"是否检查更新"下拉框):

if (update_value != gui::update_off) { const bool in_background = m_with_cli_boot || update_value == gui::update_bkg; const bool auto_accept = !in_background && update_value == gui::update_auto; m_updater.check_for_updates(true, in_background, auto_accept, this); }

四个选项对应四种可验证的行为:

  • 在设置里选"Yes",启动检查完直接弹版本对比对话框,预期结果:每次都要你手动点确认
  • 选"Background",启动检查完成后仅在有更新时发通知,预期结果:进度窗不挡游戏列表
  • 选"Automatic",发现更新直接走下载安装,预期结果:全程不询问,但安装前仍要求模拟已停止
  • 选"No",完全跳过自动检查,预期结果:只能靠 File 菜单的"Check for Updates"手动触发

两个补充条件:

  • 用命令行参数直接启动游戏时,本次检查被强制转为后台模式,预期结果:启动流程不被弹窗卡住
  • 手动触发(main_window.cpp 中的菜单项updateAct)传automatic=false,下一节讲的限制对它不生效,预期结果:本地构建也能点菜单拿到更新

为什么有的机器会静默跳过检查

这是 RPCS3 自动更新 里"有人弹提示、有人永远不弹"的最直接原因。check_for_updates内,自动检查要过两道硬门槛,命中即返回,并在UPDATER日志通道留下一行:

if (!allow_local_auto_update && rpcs3::is_local_build()) { update_log.notice("Skipped automatic update check: this is a local build"); return; } #ifdef __linux__ if (!::getenv("APPIMAGE")) return; // 非 AppImage 启动,跳过 #endif

判断依据有两处:

  • 构建的 git 分支恰为local_build,该标志在编译期就烙进二进制(见 rpcs3_version.cpp)。设计意图是避免官方发行版覆盖开发分支的工作现场,所以allow_local_auto_update是恒为 false 的常量,想测更新必须改源码重编
  • Linux 上只有 AppImage 方式启动才会设置APPIMAGE环境变量,源码编译或包管理器安装都没有,预期结果:自动更新被跳过,只剩手动检查可用

想确认自己命中哪道门槛:在日志里搜Skipped automatic update check,冒号后的一句话就是原因,不用再看别的。

版本比对请求长什么样,结果如何判定

过了门槛后,更新器用当前 commit、os_type、os_arch、os_version 四个参数拼出查询请求。update_manager.cpp 的handle_json按固定顺序做三段判定:

  1. 先看return_code:负值表示异常态。-1意为"查不到当前 commit"(自定义/PR 构建),只记警告;-2是服务端维护,-3是非法查询,其余负值按未知服务器错误记录
  2. 再校验latest_build节点完整性:downloadsizechecksumversiondatetime每项都要存在且类型正确,缺一项就记录具体节点名并中止
  3. 最后校验下载地址必须指向 RPCS3 官方发布库,否则记 fatal 中止——这一行是防更新通道被篡改的 JSON 劫持

三种正常状态怎么从日志里认出来

  • 日志出现 "RPCS3 is up to date!" 且自动检查无弹窗,预期结果:版本已最新,这不是故障
  • 弹窗提示存在"更好的版本"并建议降级:服务端最新时间戳早于当前,通常说明当前版本被标记为坏版本,这种提示不要忽略
  • 弹窗显示 "You're currently using a custom or PR build":走了-1分支,手动检查会询问是否切换,自动检查则不弹

跳过版本号写在哪里

版本对比对话框里的 "Don't show again for this version" 复选框,勾选并点 No 后,新版本字符串会被写入 gui_settings.h 的infoBoxSkipVersion项。此后的每次自动检查先拿它和新版本号比对,相等就静默关掉进度窗并记录 "Skipping automatic update notification"。

  • 跳过记录只对自动检查生效,手动点菜单永远会问,预期结果:测试通道可以反复验证任意版本
  • 记录的是版本号而非"此后全部",官方发一个新版本号后提示自动恢复
  • 想清除记录:删掉 GUI 配置文件main_window组里的对应项,预期结果:下次启动提示恢复

安装阶段三个平台各换哪种文件

安装启动前的两道硬条件

  • 更新器先检查Emu.IsStopped(),模拟在跑就直接中止并提示"请先停止当前游戏",预期结果:不会在进程占用文件时动安装目录
  • 再比对大小(实际值对服务端声明值)并计算 SHA256 与 JSON 里的checksum比对,任一不匹配就拒绝安装,预期结果:磁盘上一个文件都不会被改动

三个平台的换文件方式

  • Linux AppImage:旧文件改名为<原文件名>_old,新包写回原路径、恢复可执行权限,用execv--updating参数换进程,预期结果:下次启动即新版,旧文件留在原地可回退
  • Windows:7z 包先写临时目录再逐条目解压到安装目录,遇到被锁定的文件先改名到rpcs3_old/子目录再覆盖,完成后用_wexecl重启,预期结果:多数文件锁不阻断更新
  • macOS:解压到临时目录,由应用 Resources 里自带的update_helper.sh完成 .app 替换与重启动,预期结果:应用路径保持不变

安装成功后,RPCS3 自动更新 流程会留下两份凭证:配置目录的update_history.log追加一行带时间戳的 "Updated from X to Y",日志通道记录 "Update successful!"。排错时先找这两处。

⚠️ 排错:三类常见故障怎么判定

按"症状 → 日志关键字 → 判定依据"的顺序查,不要跳步。

故障一:从不弹通知,怀疑坏了

  • 第一步在日志搜Skipped automatic update check:搜到即原因已写明(本地构建或非 AppImage),排查结束
  • 第二步确认 GUI 配置里checkUpdateStart是否被设成了 "No",是的话改回其他选项,下次启动恢复检查
  • 第三步看日志有无检查记录但无弹窗:搜 "Skipping automatic update notification",命中即被版本跳过记录拦下,按上一节清除即可

故障二:手动点检查立刻报错

  • 第一步看UPDATER日志的错误内容:Invalid JSON说明响应格式不对,先重试排除瞬时故障
  • 第二步看return_code是否为-1:它表示当前构建不在官方版本库里,属正常状态而非网络故障,弹窗会询问是否切到官方版
  • 第三步若日志是 "Your OS isn't currently supported":编译目标不在 windows/linux/mac 之列,自动更新本就不支持该平台

故障三:下载出现 Hash mismatch 或 size mismatch

  • 第一步先看大小比对:它在哈希之前执行,大小不一致就是下载本身不完整,重试即可
  • 第二步大小正确但哈希不匹配:包内容与服务器声明不符,先排除中间代理改写响应
  • 第三步重试仍不匹配则放弃本次更新。此时更新器未写入任何文件,不要手动解压安装包

下一步怎么走

  • 对最近一次启动的日志执行grep UPDATER,能读通行序,即可判定大部分更新问题
  • 想深入:读 update_manager.h 的update_info结构体,它是全流程唯一的状态载体,字段含义就是流程图

【免费下载链接】rpcs3PlayStation 3 emulator and debugger项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询