Windows Server 2016 64位 ASP+Access(.mdb) 80004005 最简解决方案

 

一、问题现象

环境:Windows Server 2016 64位 + IIS 10 + 经典 ASP + Office 2010 64位 + Access 2010 64位引擎 + .mdb 格式数据库
核心报错:
  • 3706:未找到提供程序
  • 80004005:未指定的错误
反复调整驱动、连接字符串、文件夹权限,仍无法正常连接数据库。

二、根本原因

  • 架构不匹配:64位应用池必须搭配64位ACE驱动,Jet 4.0无64位版本,无法使用
  • 驱动冲突:64位Office与64位ACE驱动直接安装会冲突,需静默安装
  • 权限缺失:ACE驱动运行需写入C:\Windows\Temp,无权限直接报80004005(核心原因)
  • 权限不全:仅给网站目录授权不够,需同时给.mdb文件单独授权

三、最简修复步骤

1. IIS应用池配置(关键)

  1. 打开IIS管理器 → 应用程序池 → 找到目标站点对应的应用池
  2. 右键 → 高级设置 → 找到「启用32位应用程序」,设置为 False(切换为64位模式)
  3. 右键应用池 → 回收,使配置生效

2. 驱动正确安装

  1. 控制面板 → 程序和功能 → 卸载现有「Microsoft Access Database Engine 2010」
  2. 下载64位版本AccessDatabaseEngine_X64.exe
  3. 以管理员身份运行CMD,执行静默安装(跳过Office冲突):
AccessDatabaseEngine_X64.exe /quiet /norestart

3. 权限一键配置(管理员CMD执行,直接复制)

:: 网站目录授权(替换为你的站点目录)
icacls "E:\www\www.flbj.net" /grant "IIS_IUSRS:(OI)(CI)(F)" /T
icacls "E:\www\www.flbj.net" /grant "IUSR:(OI)(CI)(F)" /T
icacls "E:\www\www.flbj.net" /grant "NETWORK SERVICE:(OI)(CI)(F)" /T

:: 系统临时目录授权(核心,解决80004005)
icacls "C:\Windows\Temp" /grant "IIS_IUSRS:(OI)(CI)(F)" /T
icacls "C:\Windows\Temp" /grant "IUSR:(OI)(CI)(F)" /T
icacls "C:\Windows\Temp" /grant "NETWORK SERVICE:(OI)(CI)(F)" /T

:: 重启IIS生效
iisreset

4. 正确ASP连接代码(直接复制使用)

<%
Dim conn, dbPath
Set conn = Server.CreateObject("ADODB.Connection")
dbPath = Server.MapPath("工具书.mdb") ' 替换为你的数据库文件名

' 64位ACE驱动专用连接字符串
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";"

Response.Write "✅ 数据库连接成功!"
conn.Close
Set conn = Nothing
%>

四、错误速查(快速定位问题)

错误码
核心原因
快速解决
3706
应用池与驱动位数不匹配
应用池启用32位设为False,使用64位ACE驱动
80004005
C:\Windows\Temp无写入权限
执行步骤3的Temp目录授权

五、关键结论

  • 升级Windows Server 2022无效,64位架构限制与系统版本无关
  • 64位系统下,彻底弃用Jet 4.0,仅使用Microsoft.ACE.OLEDB.12.0驱动
  • 80004005错误99%是Temp目录权限问题,优先排查此处
  • 按本文步骤配置,无需额外操作,可直接稳定运行

六、适用范围

Windows Server 2016/2019/2022 64位、经典ASP、Access .mdb数据库、IIS 10及以上版本
posted @ 2026-04-02 14:18  李文学  阅读(8)  评论(0)    收藏  举报