调用Open方法提示Microsoft.ACE.OLEDB.12.0未注册问题求助
解决Microsoft.ACE.OLEDB.12.0未注册的问题
1. 核对PowerShell运行位数与Office/ACE引擎位数
- 执行以下命令确认当前PowerShell的位数:
[Environment]::Is64BitProcess - 若返回
True(64位进程),但安装的是32位Office 2016/ACE引擎,必须切换到32位PowerShell运行脚本,路径为:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe - 核心逻辑:32位组件无法被64位进程调用,反之亦然,必须保持位数一致。
2. 手动重新注册ACE OLEDB组件
- 以管理员身份打开对应位数的命令提示符:
- 32位:
C:\Windows\SysWOW64\cmd.exe - 64位:
C:\Windows\System32\cmd.exe
- 32位:
- 执行注册命令(根据你安装的ACE版本选择路径):
# Access数据库引擎2010(Office14) regsvr32 "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL" # 或Office 2016自带的引擎(Office16) regsvr32 "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\ACEOLEDB.DLL" - 若提示“DllRegisterServer在ACEOLEDB.DLL已成功”,说明注册完成。
3. 清理冲突组件,重新安装匹配位数的Office与ACE引擎
- 彻底卸载所有Office版本和Access数据库引擎(通过控制面板→程序和功能)
- 先安装Office 2016,确认其位数(32位/64位):打开Word→文件→账户→关于Word,查看版本信息中的位数标注
- 安装同位数的Access数据库引擎(若Office是32位,就装32位ACE;64位Office装64位ACE)
- 注意:不要混合安装32位和64位的Office/ACE组件,这会导致注册表冲突。
4. 尝试更换连接字符串中的Provider版本
- 既然已安装Office 2016,可尝试使用对应版本的Provider,修改连接字符串为:
$connectionString = "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=$DB_FILE;Persist Security Info=False;" - Office 2016自带的ACE引擎版本为16.0,部分场景下12.0的兼容性不如同版本的Provider。
5. 检查注册表项权限
- 打开注册表编辑器,定位到
HKEY_CLASSES_ROOT\Microsoft.ACE.OLEDB.12.0 - 右键该项→权限,添加当前运行脚本的用户账户,赋予读取权限(必要时可赋予完全控制权限测试)
- 重复上述操作,检查
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\12.0\Access Connectivity Engine的权限设置
内容的提问来源于stack exchange,提问作者coffeeANDVolts
相关产品推荐
相关产品推荐

