Files
update-client/README.md
T
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

78 lines
3.8 KiB
Markdown

# SimCAE 更新客户端
`update-client` 提供了 SimCAE 使用的受控启动和更新运行时。它是作为父 SimCAE 项目的一部分构建的,并不是一个独立的最终用户交付产品。
## 发布不变量
* 每个受支持的发布版本构建都通过 `Launcher` 启动;直接启动应用程序必须被拒绝。
* 调试构建可能允许本地开发的直接启动,但它们绝不能打包给用户使用。
* 产品配置在配置时选择并嵌入到二进制文件中。安装的 `app_config.json` 不是支持的配置机制。
* 可变的机器状态与产品策略分开保存,并不是授权的来源。
* 由服务器签名的策略、清单、设备凭证以及更新负载验证始终保持权威性。
* 用户可见的源文本是英文。其他语言仅通过本地化资源提供。
* 父级 `package_installer` 目标是唯一支持的最终用户包路径。 `package_installer_qt` 已归档且不被支持。
## 运行时组件
| 组件 | 责任 |
| --- | --- |
| 启动器 | 验证启动策略、设备状态和已安装文件;检查更新;创建一次性启动凭证。 |
| 更新器 | 下载并验证更改的文件,管理更新事务,需要时请求引导替换,并提交或回滚。 |
| Bootstrap | 替换在更新过程中无法更新的文件,然后继续事务。 |
| 主应用 | 集成示例用于启动票的消费和更新健康报告。SimCAE 在其可执行文件中实现了相同的契约。 |
| 公共 | 共享产品配置、状态、HTTP、身份、策略、完整性以及票务支持。 |
## 支持的流程
从父级 SimCAE 仓库中进行配置、构建、测试和打包。正常的发布流程是:
```powershell
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/客户端打包脚本。它们绕过了父安装规则,且不再代表交付的产品。
请参见 [构建和打包](docs/build-and-packaging.md) 了解前提条件、独立开发者构建、包检查和输出所有权信息。
## 配置
配置时的源文件选择顺序如下:
1. `config/config.json`,如果存在的话。
2. `config/app_config.example.json`,否则。
所选数据将被验证并嵌入。源文件不会被复制到安装目录中。安装目录中名为 `app_config.json``client.ini` 的文件仅为遗留输入,不得覆盖嵌入的策略。
查看 [配置和安全](docs/configuration-and-security.md) 和 [旧配置迁移](docs/legacy-configuration-migration.md) 。
## 文档说明
* [架构](docs/architecture.md)
* [构建和打包](docs/build-and-packaging.md)
* [配置和安全](docs/configuration-and-security.md)
* [本地化维护](docs/i18n.md)
* [旧配置迁移](docs/legacy-configuration-migration.md)
## 仓库规则
* 保持生产环境的 C、C++和 CMake 文件中不含汉字。添加或更新本地化 UI 文本的翻译资源。
* 通过 CMake 导入目标链接 Qt、OpenSSL 和其他依赖项。绝不要将开发机器的路径添加到仓库中。
* 将发布打包保留在父项目中。此子项目可能会暴露目标和安装规则,但不会生成竞争的安装程序。
* 不要将嵌入资源、本地设置或客户端令牌视为可以抵御机器管理员的机密信息。
* 没有可用启动器/更新运行时的平台必须导致发布配置或打包失败。它不得回退到直接启动。
## 仓库布局
```text
Bootstrap/ 更新交接可执行文件
Common/ 共享运行时服务
Launcher/ 必要的产品入口点
MainApp/ 集成示例
Updater/ 事务性更新可执行文件
config/ 配置时模板和公共验证材料
docs/ 保持的架构和操作文档
```