Comely fe5aa5bbf0 feat(hardening): 内嵌产品配置 + 系统级状态 + 全量 i18n + 依赖治理 + 资料清理
update-client-hardening 四工作流合入(构建/静态检查已过):

- 配置:不可变产品策略经 UpdateClientResources.cmake 归一化校验后
  内嵌 qrc(URL/相对路径/主程序必须落 install_root/版本/UUID 格式,
  CMake override 写入前复验);可变机器状态迁系统级原生存储;
  运行目录不再落可编辑 app_config.json。
- i18n:生产源全英文(no-Han 检查 41/41),中文进 translations/
  zh_CN 目录;翻译加载收敛 Common/TranslationHelper 唯一入口;
  Bootstrap 补资源文件。
- 依赖:Qt/OpenSSL/架构/Perl 机器路径改 imported targets +
  UpdateClientDependencies.cmake,3rdparty 由父工程契约供给。
- 清理:旧 README/SDK README/3 个重复 PowerShell 打包脚本/PDF 提取
  文本删除,canonical README + 5 份结构化英文文档替代;Launcher
  requireAdministrator manifest;统一 MSVC /utf-8 删运行时编码设置。
2026-07-10 00:38:23 -07:00
2026-07-09 09:17:30 +00:00

SimCAE 更新客户端

update-client 提供了 SimCAE 使用的受控启动和更新运行时。它是作为父 SimCAE 项目的一部分构建的,并不是一个独立的最终用户交付产品。

发布不变量

  • 每个受支持的发布版本构建都通过 Launcher 启动;直接启动应用程序必须被拒绝。
  • 调试构建可能允许本地开发的直接启动,但它们绝不能打包给用户使用。
  • 产品配置在配置时选择并嵌入到二进制文件中。安装的 app_config.json 不是支持的配置机制。
  • 可变的机器状态与产品策略分开保存,并不是授权的来源。
  • 由服务器签名的策略、清单、设备凭证以及更新负载验证始终保持权威性。
  • 用户可见的源文本是英文。其他语言仅通过本地化资源提供。
  • 父级 package_installer 目标是唯一支持的最终用户包路径。 package_installer_qt 已归档且不被支持。

运行时组件

组件 责任
启动器 验证启动策略、设备状态和已安装文件;检查更新;创建一次性启动凭证。
更新器 下载并验证更改的文件,管理更新事务,需要时请求引导替换,并提交或回滚。
Bootstrap 替换在更新过程中无法更新的文件,然后继续事务。
主应用 集成示例用于启动票的消费和更新健康报告。SimCAE 在其可执行文件中实现了相同的契约。
公共 共享产品配置、状态、HTTP、身份、策略、完整性以及票务支持。

支持的流程

从父级 SimCAE 仓库中进行配置、构建、测试和打包。正常的发布流程是:

git submodule update --init --recursive
cmake --preset SimCAE-release
cmake --build --preset SimCAE-release --target SimCAE
ctest --test-dir out/build/SimCAE-release -C Release --output-on-failure
cmake --build --preset SimCAE-release --target package_installer

不要使用已移除的 PowerShell SDK/客户端打包脚本。它们绕过了父安装规则,且不再代表交付的产品。

请参见 构建和打包 了解前提条件、独立开发者构建、包检查和输出所有权信息。

配置

配置时的源文件选择顺序如下:

  1. config/config.json,如果存在的话。
  2. config/app_config.example.json,否则。

所选数据将被验证并嵌入。源文件不会被复制到安装目录中。安装目录中名为 app_config.jsonclient.ini 的文件仅为遗留输入,不得覆盖嵌入的策略。

查看 配置和安全旧配置迁移

文档说明

仓库规则

  • 保持生产环境的 C、C++和 CMake 文件中不含汉字。添加或更新本地化 UI 文本的翻译资源。
  • 通过 CMake 导入目标链接 Qt、OpenSSL 和其他依赖项。绝不要将开发机器的路径添加到仓库中。
  • 将发布打包保留在父项目中。此子项目可能会暴露目标和安装规则,但不会生成竞争的安装程序。
  • 不要将嵌入资源、本地设置或客户端令牌视为可以抵御机器管理员的机密信息。
  • 没有可用启动器/更新运行时的平台必须导致发布配置或打包失败。它不得回退到直接启动。

仓库布局

Bootstrap/   更新交接可执行文件
Common/      共享运行时服务
Launcher/    必要的产品入口点
MainApp/     集成示例
Updater/     事务性更新可执行文件
config/      配置时模板和公共验证材料
docs/        保持的架构和操作文档
S
Description
软件更新系统客户端仓库
Readme 754 KiB
Languages
C++ 84.6%
PowerShell 5.8%
Shell 5%
CMake 4.6%