V2.8.2
更新日期:2026 年 10 月 23 日
以下内容以 V2.8.1 为基线,重点是启用 Windows 签名更新通道,并收口安装、初始化、备份恢复、服务日志和控制中心的遗留问题。
V2.8.2 的改动集中在 Windows 端:完整安装包开始自带更新公钥,控制中心接入签名更新通道;安装器、初始化向导、备份恢复、服务日志和控制中心的失败反馈也一并补全。服务端同时修复了局域网 http 登录、教室时间显示和跨天考试日期等问题。
升级影响
V2.8.1 及更早版本没有更新公钥,不能通过在线更新升级到 V2.8.2,需要手工安装一次完整包;安装后即可在控制中心接收后续在线更新。
本次数据结构保持向后兼容,迁移由服务端在首次请求时自动执行,不需要手工跑 SQL。云端部署按原流程重新部署即可。
一、新功能与改进
Windows 安装与在线更新
Windows 端的完整操作说明见 Windows 控制中心:安装、使用与维护。
- 签名更新通道:完整安装包开始随附
updater/trust.json公钥,控制中心通过update.pikachu2026.space获取作者端推荐,网络异常时回退可信 GitHub 稳定发布。清单、签名、包摘要和版本都必须校验通过;离线.nvu导入同样验签。 - 回退边界:只有作者端不可达、超时或返回 408/429/5xx 时才启用 GitHub 兜底;无推荐、409、清单或签名校验失败不会切换来源。下载支持续传,安装前执行保护备份,健康检查失败自动回退上一版本。
- 安装与初始化分离:安装器只负责文件、运行库和快捷方式;数据库初始化、服务注册和健康检查在初始化向导中完成。长时间运行的界面保持在普通权限,需要管理员权限的步骤单独提权。
- 初始化结果分级:只有致命错误才使初始化失败;非致命警告照常显示并写入记录,不再关闭后续更新入口。产品版本统一从安装目录读取,避免脚本内硬编码。
- 备份、恢复与更新互斥:备份、恢复、卸载和更新共用数据库维护锁;未完成的更新阶段会阻止业务服务自行启动,但更新器自身的校验和回退阶段保持可启动。
Windows 运维与控制中心
- 服务日志:多个输出流改为单写线程排队写入,按大小轮转并保留历史文件,避免并发写同一文件导致日志丢失。
- 系统检查页:改为定向查询防火墙规则和计划任务,耗时不再随机器规则数量增长;检查超时从 20 秒提高到 45 秒,兜住冷启动。
- 控制中心单实例:第二个实例通过本机管道把页面请求转交给已运行实例;管道暂时不可用时按退避重试,不再静默无响应。
- 控制中心诊断日志:启动、单实例转发、监听失败和未处理异常写入
%LOCALAPPDATA%\Novora\logs\controlcenter-*.log,按 2 MiB 轮转并保留 3 份历史,Release 下“双击没反应”不再没有任何痕迹。 - 卸载失败上报:卸载脚本把失败原因写入进度记录,安装器据此向操作员显示具体错误,而不是只显示“卸载失败”。
- 托盘菜单:改用主题卡片样式,图标使用 GDI+ 绘制,修复白底、模糊和深色彩边,适配系统主题与高对比度。
教室端与同步
- ClassIsland 条件同步:插件可带
knownVersion轮询,考试修订、年级/班级、绑定浏览器与中国日历日期都没变时返回changed=false并省略考试数据,稳定状态退化成一次 JOIN 小查询,不再反复下发大 JSON;includeCompletedToday=true保留当天已结束的考试,让上午/下午整段考试模式能覆盖场间。capability 增加conditional-sync与session-history,不带新字段的旧插件协议不变。 - 公告代理去重:
/api/announcements增加 60 秒进程内缓存并合并并发回源,不同limit共用一次最多 50 条的上游请求;发布/撤下窗口仍在代理侧逐次过滤,缓存以上游地址为键,作者端更换公告域名立即生效。 - 公告图片代理边界:
/api/announcement-images的上游请求增加 10 秒超时,只接受image/*响应,单张图片上限 10 MiB;超时返回 504,类型或大小异常返回 502。
二、问题修复
登录与访问
- 局域网 http 登录被拦:跨源判定改为比较请求主机,用
http://内网地址访问本机服务时不再返回 403;非同源请求仍按白名单校验,https 与公网行为不变。Linux 与 Windows 使用同一份服务端代码,行为一致。 - 打开管理端无响应:控制中心在提权或非交互令牌下没有默认浏览器关联,原来会报“找不到应用程序”;现在回退到通过 App Paths 找到的 Edge/Chrome 后再提示。
时间与日期
- 教室端时间显示:快照选择与公告格式化改为按
Asia/Shanghai解析和显示,设备时区不是中国时区时不再把 09:10 显示成 01:10。 - 批量添加跨天考试:日期键改用 UTC 锚点计算,UTC+8 下“次日结束”不再被算回当天,跨天考试可以正常通过校验。
- 设备离线提示:服务端“最后在线”统一按上海时区显示,UTC 部署不再比北京时间少 8 小时。
服务端与数据
- 请求边界:畸形 URL 返回 400,非法 JSON 请求体返回 400,超过 2 MiB 的请求体返回 413,不再统一落成 500。
- 设备在线状态:ClassIsland 插件在线状态改为读取
pluginLastSeenAt,修复心跳正常却一直显示离线的问题。 - 运行日志凭据:设备日志通道继续使用本机设备密钥,不读取管理员会话令牌;鉴权头收敛到
auth/session.ts的deviceAuthHeaders(secret),业务文件里不再手拼Bearer。 - Windows 初始化:修复初始化时数据库密码读取失败,以及
initdb、psql、sc输出和 PowerShell 5.1 日志编码不正确的问题;命令行输出按 BOM、严格 UTF-8、当前 OEM 代码页依次解码。 - 其他:移除考试启动器重复的
getAppSettings导入;运行日志分页改用兼容旧运行时的数组下标写法,避免Array.prototype.at在旧环境不可用。
三、升级提示
- V2.8.1 及更早版本不能在线升级到 V2.8.2:请手工安装一次
Novora-Setup-2.8.2.exe完整包;此后才能在控制中心接收在线应用更新。 - 升级前备份数据库与
ProgramData\Novora数据目录。迁移由服务端在首次请求时自动执行,不需要手工跑 SQL。 - 安装 2.8.2 完整包后,确认
updater/trust.json随包部署;应用更新不会覆盖学校配置、数据库、日志或备份。 - 应用更新要求 Node 24、Windows x64。作者端不可达时可使用离线
.nvu包导入,导入前同样校验签名和摘要。 - 教室大屏与 ClassIsland 插件无需同步升级;插件 0.3.0 起可使用条件同步,未升级的插件仍按原协议完整同步。
- 升级后建议验一遍:打开控制中心、用
http://内网地址登录后台、确认设备在线状态、批量添加一场跨天考试。
更完整的兼容说明见版本兼容与升级。