# 协议文件校验误报修复(1.4.17) ## 结论与原因 此前性能优化引入了兼容性回归。安装版 1.4.16 使用 Python 3.12.14;在本机 Windows 上,同一份未变化的 WXWork.exe,`Path.stat().st_ctime_ns` 返回创建时间,而 `os.fstat().st_ctime_ns` 返回变更时间。跨接口比较导致错误提示“企业微信文件在校验期间发生变化,请重新检测”。Python 3.11.9 没有表现出相同差异,所以此前仅使用 3.11 的源代码回归未发现问题。 真实文件修复前复现记录:`real-before.json`;修复后:`real-after-python312.json`、`real-after-python311.json`。两种运行时得到相同 SHA256。 ## 修复 - `C:\wechat_rpa\wecom_native_sender.py`:统一通过只读打开文件后使用 `fstat` 获取身份;计算哈希期间保持原句柄打开,再打开路径核对身份,消除跨接口字段差异。 - 保留卷、文件 ID、长度、修改时间、变更时间核对,实际变更/替换仍会拒绝。 - 保留同轮只读检测复用;真正发送前仍完整校验,PID 重用与账号切换不会绕过检查。 - 原文件备份:`C:\wechat_rpa\backups\protocol-file-identity-20260917\wecom_native_sender.py`。 - `C:\kefu\wechat_rpa` 不包含此原生协议模块,没有为它复制新增协议功能。 ## 验证 - Python 3.12.14:105 项协议相关隔离测试全部通过,0 失败、0 错误、0 跳过。 - Python 3.11.9:同样 105 项全部通过。 - 其中新增 8 项覆盖真实 Windows 临时文件时间差异、跨接口元数据差异、同长度/时间文件替换、哈希中修改、只读缓存、PID 重用、发送前重新校验。 - 独立复核也在两种运行时各通过这 8 项。 - Python 3.12 完整本机只读检测:企业微信 5.0.11.6018、当前登录账号、当前账号消息库均已核对,错误列表为空,耗时约 2.48 秒。见 `source-probe-python312.json`。 - 当前安装版数据目录缺少此账号的首次发送及回执记录,因此状态仍为 `native_validation_required`;本次不发送消息、不伪造回执、不启动监听、不修改任务队列。 ## 安装包 - 1.4.17 使用生产构建环境 Python 3.12.14 打包,包含 `python312.dll`。 - 生产打包自检通过;独立检查冻结 PYZ 确认包含本次 `fstat` 修复,冻结函数在 Python 3.12 的临时文件哈希测试通过,UI 资源匹配,没有混入私有配置。 - 主程序 SHA256:`dceb8289a6d5d8a9fb5b6e14ce7acd5a1dd82399f3ea3e1d74ae0cb24cc7ac19`。 - **打包后真实验证**:用新 EXE 的 `--protocol-diagnostics` 隐藏运行只读诊断,退出码 0,错误列表为空,企业微信版本/当前登录/消息库均核对通过。协议构建校验约 2.33 秒;包含额外模块静态扫描的完整深度诊断共 10.69 秒,不能与普通按钮检测耗时直接对比。结果见 `frozen-protocol-diagnostics.json`。 - 打包版同样保留缺少真实回执时的首次发送验证要求。 - 安装包:`C:\wechat_rpa\releases\甄AI客服-安装包-v1.4.17.exe`。 - 安装包 SHA256:`ec11843342b3f136ff1d017489bbc388ac55818b026731c1d413d1be2e8d8165`。 - 本次没有关闭用户当前 1.4.16 程序,没有替换正在使用的安装目录,也没有发布到服务器。退出旧版后安装 1.4.17,再点击“检测本机协议”;如提示首次发送验证,需按当前账号完成真实验证。