#9538·dbx

[Bug] Windows Server 2012 R2 导入离线整包失败:解压错误丢失系统错误码,且单项失败会中断整个导入

Author: zipgCreated Sep 18, 2026Updated Sep 18, 2026
Labelsbuguser-priority/P2area/agentsai-priority/P1

数据库类型和版本

与具体数据库无关(导入 dbx-agents-offline-windows-x64.zip 离线整包 / 离线驱动包时触发)

问题描述

1. 复现步骤

内网 Windows Server 2012 R2 上打开「驱动商店 → 离线导入」,选择官方整包 dbx-agents-offline-windows-x64.zip(agents-v0.2.113),导入失败:

离线导入失败: Failed to extract JRE archive: failed to unpack '\?\C:\Users\\\user\.dbx\agents\jre-extract-38gSoV\dbx-jre\bin\api-ms-win-core-string-l1-1-0.dll'

2. 期望结果

  • 该 zip 支持直接导入,不需要先解压;
  • 失败时能看到真正的原因(系统错误码),而不是只有一句 failed to unpack
  • 即使某个条目失败,也不应中断其余 JRE/驱动的安装。

3. 实际结果

  • 报错只有 tarfailed to unpack '<路径>'tar::ErrorDisplay 只打印自身描述,把 io::Error 留在 source() 链里,所以 Access is denied. (os error 5)(杀毒/EDR 占用)、The process cannot access the file (os error 32)(文件被占用)、There is not enough space (os error 112)(磁盘/配额不足)这些真正原因都到不了 UI,无法判断是安全软件还是磁盘问题;
  • JRE 解压失败后整个离线导入直接终止,包里的驱动(ora 等)一个都没装上,所以用户看到的是"整体导入失败",而不只是 JRE 失败。

4. 离线包本身没有问题(已核对)

  • 用户手上的 zip 与 release agents-v0.2.113dbx-agents-offline-windows-x64.zip 大小一致:645,889,847 字节(630,752 KB);
  • 包内嵌套的 jre/dbx-jre-21-windows-x64.tar.zst 的 SHA-256 = 7b28e7a51864fe4a19ab53282a25446a114291c05b9c6161b1f92d4f1414c2f5,与 release 资产 dbx-jre-21-windows-x64.tar.zst 完全一致;
  • 该归档结构合法:223 个条目、单一顶层目录 dbx-jre/、无软链接、最长路径 63 字符,本地解压 0 错误。

5. 根因

tar::Archive::unpack() 写第 145 个条目 dbx-jre/bin/api-ms-win-core-string-l1-1-0.dll 时被本机环境拒绝(杀毒/EDR 短暂占用刚创建的文件,或磁盘/配额不足),而 tar 吞掉了系统错误码;该错误又直接向上冒泡,终止了整个离线导入。

修复方向(已提交 PR,见下方关联):解压报错保留底层系统错误码、Windows 上对 JRE 解压做有上限重试、按条目汇报失败而不是整包失败。

支持信息

DBX 版本:客户未提供(报错路径为 tar-rs 解压的临时目录,不是系统解压工具,因此可定位到内置解压流程) 运行环境:桌面端 操作系统:Windows Server 2012 R2 系统架构:x64