我在32位Windows 2008服务器中创建了一个用.NET 3.5开发的Windows应用程序。在64位服务器中部署应用程序时,它显示错误“Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册”。
因此,作为此问题的解决方案,我已将项目的构建属性更改为X86,以便它将以32位模式构建,并在32位机器中重建项目。但是,同一个项目使用其他数据库驱动程序(DB2,SQL等)连接到其他数据库。因此,当我在64位操作系统中再次部署我的应用程序时,它会抛出异常“尝试在32位平台上加载64位程序集。”
我正在使用Microsoft.Jet.OLEDB.4.0驱动程序来读取和写入Excel(.xls)
答案 0 :(得分:227)
我找到了解决这个问题的方法。我在问题中描述的问题基本上是由于64位操作系统中 Microsoft.Jet.OLEDB.4.0驱动程序的不兼容性。
因此,如果我们在64位服务器中使用Microsoft.Jet.OLEDB.4.0驱动程序,我们必须强制我们的应用程序以32位模式构建(这是我在广泛搜索时找到的答案已知问题),这会导致我的代码的其他部分中断。
幸运的是,现在Microsoft发布了64位兼容的 2010 Office System驱动程序 ,可以替代传统的Microsoft.Jet.OLEDB.4.0驱动程序。它适用于32位和64位服务器。我已经将它用于Excel文件操作,它在这两种环境中都适用于我。 但是此驱动程序位于 BETA 。
答案 1 :(得分:109)
如果问题在ASP.NET中仍然存在,那么我只需要在应用程序池的高级设置中将“启用32位应用程序”设置更改为True。
答案 2 :(得分:45)
我有同样的问题
Microsoft.Jet.OLEDB.4.0'提供程序未在本地注册 机
我通过 neo 应用了答案,但在我将提供程序更改为连接字符串中的“Provider = Microsoft.ACE.OLEDB.12.0;”之后,它才起作用。
希望如果有人面临同样的问题,这会有所帮助。
答案 3 :(得分:21)
我知道这是很老的问题而且很多人已经回答了。但我总结了理解的事情:
如果文件扩展名为xls且OS为32位,则只能使用“Microsoft.Jet.OLEDB.4.0
”。微软尚未发布此驱动程序的64位版本。
如果文件扩展名为xlsx或OS为64位,则必须使用“Microsoft.ACE.OLEDB.12.0
”。以32/64位模式编译的应用程序不会影响驱动程序的选择。
始终在OS 64位上安装Microsoft.ACE.OLEDB.12.0
的64位驱动程序。如果您已经安装了Office 32位,则需要使用/ passive参数从cmd运行驱动程序。此hack仅适用于Office 2013,Microsoft已从Office 2016 for Microsoft.ACE.OLEDB.16.0驱动程序停止此解决方法。
AccessDatabaseEngine_x64.exe /passive
Download drivers Microsoft.ACE.OLEDB.12.0
private void ProcessFile(string path)
{
string connString = string.Empty;
if (Path.GetExtension(path).ToLower().Trim() == ".xls" && Environment.Is64BitOperatingSystem == false)
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
else
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}
如果使用AnyCPU标志编译应用程序,它将在64位操作系统上查找64位访问驱动程序,在32位操作系统上查找32位访问驱动程序。
答案 4 :(得分:19)
我有同样的消息,我在visual studio 2010上有一个网页,我在那个页面上读了一个file.xls,在我的项目中视觉没有任何问题,当我把它放在我的IIS本地扔我'Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册 ,我按照这个步骤修复了这个问题,
1.-打开IIS
2. - 在高级设置上更改appPool
3.-true 启用32位应用程序。
这就是
ps.I在Active Solution Platform上将Configuration Manager更改为X86
答案 5 :(得分:17)
答案 6 :(得分:8)
我有同样的问题。我将应用程序配置更改为x86
,然后就可以了!
答案 7 :(得分:7)
我刚将项目属性更改为x64格式
项目--->属性--->构建--->目标框架---> X64
答案 8 :(得分:3)
我们在桌面应用中遇到过这个问题。
开发环境 Windows 7旗舰版 - 64位 .Net Framework 4.5 提供商= Microsoft.Jet.OLEDB.4.0
通过从任何CPU将平台目标更改为X86已解决此问题。 项目属性>>构建>>平台目标。
答案 9 :(得分:2)
虽然更优化的解决方案是如上所述简单地重新编译,但这需要访问源代码。就我而言,我只有完成的.exe并且必须使用这个解决方案。它使用.Net SDK中的CorFlags.exe
来更改应用程序的加载特性。
CorLibs.exe
,所以只需检查 Windows开发工具。CorFlags.exe
。对于我安装的.Net Framework 3.5 SDK,它位于C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin
。path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+
。你完成了!这将为程序设置启动标志,使其以32位WOW64模式启动,因此可以访问microsoft.jet.oledb.4.0。
答案 10 :(得分:2)
我的桌面应用程序遇到了这个问题('Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册)。我没有选择构建32位应用程序。希望这会在同样的情况下帮助其他人。
我做了以下事情,问题就消失了:
按照neo
将我的提供程序更改为Microsoft.ACE.OLEDB.12.0
答案 11 :(得分:1)
只需根据您的机器更改属性即可: - )
项目--->属性--->构建--->目标框架---> X64
或
项目--->属性--->构建--->目标框架---> X86
答案 12 :(得分:1)
我已经从
更改了我的连接字符串var myConnectionString = string.Format(" Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0}; Persist Security Info = True; Jet OLEDB:Database Password =;",gisdbPath );
到此:
var myConnectionString = string.Format(" Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Data Source = {0}; user id = Admin; password =;", gisdbPath);
我的工作从来没有要求过Microsoft.Jet.OLEDB.4.0'注册。
答案 13 :(得分:1)
更改IIS设置应用程序池高级设置。启用32位应用程序
答案 14 :(得分:0)
我在Windows 8.1上运行“SQL Server 2014导入和导出数据(64位)”时遇到了同样的异常。
要解决此问题,我已完成以下操作
启动了SQL Server 2014导入和导出数据(32位)而不是64位,它对我有用。我没有更改任何IIS设置,也没有安装任何额外的软件。
答案 15 :(得分:0)
在旧版本的IIS中,您将找不到Advance Settings
,因此要启用Enable 32-bit Applications
,您必须执行以下命令:
cscript%SYSTEMDRIVE%\ inetpub \ adminscripts \ adsutil.vbs SET W3SVC / AppPools / Enable32bitAppOnWin64 1
和
%SYSTEMROOT%\ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -i
参考:Here
答案 16 :(得分:0)
我正在使用VS2013 for Winforms,以下解决方案适用于我。
下载:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734
然后将VS Target Platform设置为x86。
答案 17 :(得分:0)
确实没有64位版本的Jet - 并且没有计划(显然)制作一个版本。
您可以使用ACE 64位驱动程序: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734
但是,您可以在Express版本中将项目切换到32位(我还没有尝试过,并且不再以任何风格安装2008)
也许是时候完全废弃Access数据库了,咬紧牙关去找SQL服务器?
答案 18 :(得分:0)
转到开始->运行并键入cmd 这将启动命令提示符 (也可以从“开始”->“程序”->“附件”->“命令提示符”中获得
键入cd ..并按回车键 键入cd ..并再次按回车键(继续执行直到提示显示:>)
现在您需要转到一个特殊文件夹,该文件夹可能是c:\ windows \ system32,或者可能是c:\ winnt \ system32,或者可能是c:\ windows \ sysWOW64 尝试键入每个例如 cd c:\ windows \ sysWOW64 (如果显示系统找不到指定的路径,请尝试下一个) cd c:\ windows \ system32 cd c:\ winnt \ system32 如果其中之一没有引起错误,请停止,您已经找到正确的文件夹。
现在您需要通过键入以下命令并在每个命令之后按回车键来注册OLE DB 4.0 DLL
regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll
答案 19 :(得分:-2)
Jet没有64位提供商。如果您想支持多个数据库源,包括Jet到Excel,您至少需要应用程序的那部分才能在32位进程中运行。
编译x86时遇到的错误有点奇怪。在这种情况下,我无法看到如何最终引用64位程序集。