# C# 安装器、玩家端与新版兼容 ## 四个独立入口 | 程序 | 职责 | | --- | --- | | XFEWarframe.Admin.exe | 服务器启停、配置、账户、库存和 API 诊断,需要管理员令牌 | | XFEWarframe.Server.exe | ServerInteractive 控制台 API 服务 | | XFEWarframe.Player.exe | 原生 WinUI 玩家首页、版本检测、安装修复、恢复、游戏启动和诊断 | | XFEWarframe.Installer.exe | 同一套安装逻辑的 C# 命令行入口,可脚本化与离线使用 | 玩家端与安装器只引用 `XFEWarframe.Client`,不读取服务端 `server.json`,不读取管理员令牌。玩家偏好位于 `%LOCALAPPDATA%\XFEWarframe\Player\Profiles`,通过 XFEProfile 保存游戏目录、API 地址、邮箱、语言、图形和主题偏好;首次启动自动导入旧 `settings.json`。玩家端可注册与登录私服账号、查看仓库和添加货币;游戏内使用相同账号登录,桌面会话不会替代或挤掉游戏登录。见 [玩家账号与仓库](PLAYER-ACCOUNT.md)。 ## 与原 InstallHelper.exe 的区别 参考对象是用户明确指定的 `InstallHelper.exe` 本身,而非它的 WinUI 外壳。原流程下载 OpenWF 引导与热修复,使用代理 DLL,部分新版需要 Sideloadify 改写 EXE 导入。 本实现用 C# 完成 Steam 库检测、PE x64 检查、特征查找、事务安装、旧引导隔离、SHA-256 校验和挂起启动。客户端兼容组件也以 C# 编写,通过 NativeAOT 编译为原生 DLL;没有委托原 InstallHelper、PowerShell 下载器、Node 或 C++ 引导程序执行安装。 启动器先校验安装记录与 EXE 哈希,创建挂起的目标进程,显式加载兼容组件,检查初始化返回值后才恢复主线程。新版本不再依赖 EXE 是否导入 `wtsapi32.dll` / `dwmapi.dll` / `version.dll`。函数入口通过 x64 PE 展开表定位,避免固定减偏移;字符串释放函数要求所有匹配引用一致。重定向、受保护请求解码、本地缓存清单与世界状态校验在该进程内处理,不写入游戏 EXE。 更新后必须重新检测并安装。签名数量或交叉引用不匹配时明确失败,保留原安装。特征适配比固定版本黑白名单更灵活,但不保证未知未来版本的协议和结构一定兼容;真正的兼容仍需实机验证。 ## 使用 在完整玩家发行包中运行 `Client/Start.cmd`,进入“安装与维护”。选择含有 `Warframe.x64.exe` 的完整副本,设置例如 `http://127.0.0.1:8444` 的源地址,检测后安装。服务器提供 `/health` 后,可以从首页启动。 命令行示例: ```powershell ./Client/Installer/XFEWarframe.Installer.exe detect ./Client/Installer/XFEWarframe.Installer.exe check --game 'D:\Warframe' ./Client/Installer/XFEWarframe.Installer.exe install --game 'D:\Warframe' --server 'http://127.0.0.1:8444' ./Client/Installer/XFEWarframe.Installer.exe status --game 'D:\Warframe' ./Client/Installer/XFEWarframe.Installer.exe selftest ./Client/Installer/XFEWarframe.Installer.exe launch --game 'D:\Warframe' --language en ./Client/Installer/XFEWarframe.Installer.exe repair --game 'D:\Warframe' --server 'http://127.0.0.1:8444' ./Client/Installer/XFEWarframe.Installer.exe uninstall --game 'D:\Warframe' ``` 开发目录使用 `--payload artifacts/bridge`;构建原生组件运行 `scripts/Build-Bridge.ps1`。图形界面调用相同 C# 服务,不通过终端拼接这些命令。 ## 安装内容和恢复 所有新组件位于游戏目录的 `XFEWarframe/`: - `XFEWarframe.Bridge.dll`、`client.json`、`compatibility.json`、`installation.json`:组件、连接配置、兼容检查和安装文件哈希。 - `backups/legacy/`:安装前存在的三个已知代理 DLL 的原始字节。`OpenWF/` 下的旧配置和热修复保留原样。 - `backups/transactions/`、`transaction.json`:文件替换前备份与中断恢复日志。 - `logs/client-*.log`:兼容组件诊断,只记录 API 路径,不记录查询参数、账号、密码或正文。 安装和恢复持有目录内独占锁;游戏运行中拒绝安装。每次写入使用临时文件、刷盘和替换。失败与取消回滚已完成的变更;进程意外结束后,下一次安装自动恢复,也可使用 `recover --game <目录>`。恢复前逐项验证哈希,若文件已被其他程序改动则停止,避免覆盖外部改动。卸载恢复旧引导并移除受管理的组件文件,保留备份与日志;不递归删除游戏目录。符号链接和目录联接被拒绝,避免把副本操作指向原游戏。 安装器不下载游戏资源,也不从不受约束的 URL 下载可执行脚本。兼容组件随发行包提供,复制前检查本地 `payload.json` 中的 SHA-256 和原生导出。该清单用于完整性检查,不冒充发行者数字签名。 ## 本轮验证记录 目标:`D:\Warframe\Warframe.x64.exe`,版本 `2026.08.19.11.06`,SHA-256: `D01B5CB5CFF51AFC5FFB7D3AF051674AAFA84000BEE764780FF71D9D073CAD93` 来源 `D:\SteamLibrary\steamapps\common\Warframe` 只读。复制后 201 个游戏文件逐一 SHA-256 校验一致;安装和恢复后,来源全部文件的大小/修改时间不变,来源与副本的 EXE 哈希均未改变。 已验证:11 项关键特征;651 处释放调用唯一目标;NativeAOT DLL 加载、原生回调、RIP 相对指令重定位与回滚;真实副本的安装→卸载→原引导哈希恢复→重新安装→完整性检查;22 项安装器与启动器自动化用例。WinUI 玩家窗口能正常打开,辅助功能树包含 Windows 原生最小化、最大化和关闭按钮。 2026-09-25 实机补验:真实 Warframe 进程已加载兼容组件、完成 10 个回调初始化并进入登录界面。此前启动器在挂起进程上使用 `Process.Modules` 导致 Win32 错误 299,现已改为查询映射的 PE 映像;新增真实挂起子进程的回归测试。详情见 [实机验证记录](GAME-STARTUP-VALIDATION.md)。 仍未确认:游戏登录、飞船、任务、结算与重连。进入登录界面不等于完整游戏流程兼容。 发行包 `validation/` 保留测试报告;开发工作区还保存复制校验清单。服务器仍有 [MIGRATION.md](MIGRATION.md) 所列的协议和实时服务边界。