You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET应用读Excel报MDAC错误 回收IIS应用池后快速复现求解决方案

报错信息中文翻译

  • .Net Framework 数据提供程序需要 Microsoft 数据访问组件(MDAC)。请安装 2.6 或更高版本的 Microsoft 数据访问组件(MDAC)
  • 检索 CLSID 为 {2206CDB2-19C1-11D1-89E0-00C04FD7A829} 的 COM 类工厂失败,错误如下:800703fa 尝试对已标记为删除的注册表项执行非法操作。(异常来自 HRESULT: 0x800703FA)

根因说明

第二个报错是核心触发源:IIS应用池运行过程中,Access Database Engine对应的COM组件注册表项被系统标记为删除,导致后续所有调用失败。回收应用池会重置进程上下文,临时清除失效的注册表引用,所以能短暂恢复正常。

修复方案

  • 调整IIS应用池配置:打开IIS管理器,找到对应应用池,右键选择「高级设置」,找到「加载用户配置文件」选项,设置为True。该配置会为应用池标识创建独立的注册表上下文,避免进程回收时注册表项被意外标记删除。
  • 修正Excel读取代码的资源释放逻辑:现有代码大概率存在COM对象未正常释放的问题,每读取一次Excel就会残留泄漏的COM引用,积累到阈值就会触发注册表项异常。所有Excel相关的COM对象(包括Workbook、Worksheet、Application实例)都需要按创建顺序反向释放,调用Marshal.ReleaseComObject()后手动置为null,最后主动触发GC回收。
  • 调整应用池回收规则:如果业务峰值读取Excel的频率很高,可以把应用池的定期回收时间调整到业务低峰期,同时开启「禁止回收正在运行的工作进程」选项,避免正在处理Excel读取请求时进程被强制回收触发注册表标记删除。
  • 校验权限与组件位数:确认应用池运行身份对HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet以及对应Access Database Engine的注册表路径有读取权限;同时保证IIS应用池的「启用32位应用程序」配置和安装的Access Database Engine位数完全一致,要么全32位,要么全64位,避免混合位数调用触发的COM加载异常。

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:06:01