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 删运行时编码设置。
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# 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/ 保持的架构和操作文档
|
||||
```
|
||||
Reference in New Issue
Block a user