Programming

Microsoft.Jet.OLEDB.4.0 '공급자가 로컬 컴퓨터에 등록되어 있지 않습니다

procodes 2020. 5. 17. 21:46
반응형

Microsoft.Jet.OLEDB.4.0 '공급자가 로컬 컴퓨터에 등록되어 있지 않습니다


32 비트 Windows 2008 서버에서 .NET 3.5로 개발 된 Windows 응용 프로그램을 만들었습니다. 64 비트 서버에 응용 프로그램을 배포하면 "Microsoft.Jet.OLEDB.4.0 '공급자가 로컬 컴퓨터에 등록되어 있지 않습니다"라는 오류가 표시됩니다.

따라서이 문제에 대한 해결책으로 프로젝트의 빌드 속성을 X86으로 변경하여 32 비트 모드로 빌드하고 32 비트 컴퓨터에서 프로젝트를 다시 빌드합니다. 그러나 동일한 프로젝트는 다른 DB 드라이버 (DB2, SQL 등)를 사용하여 다른 데이터베이스에 연결합니다. 따라서 64 비트 OS에서 앱을 다시 배포하면 "32 비트 플랫폼에서 64 비트 어셈블리를로드하려고했습니다."예외가 발생합니다.

Excel (.xls)을 읽고 쓰는 데 Microsoft.Jet.OLEDB.4.0 드라이버를 사용하고 있습니다.


이 문제에 대한 해결책을 찾았습니다. 필자의 질문에 설명 된 문제는 기본적으로 64 비트 OS에서 Microsoft.Jet.OLEDB.4.0 드라이버 의 비 호환성으로 인해 발생했습니다 .

따라서 64 비트 서버에서 Microsoft.Jet.OLEDB.4.0 드라이버를 사용하는 경우 응용 프로그램을 32 비트 모드로 빌드해야합니다 (이 알려진 문제 를 광범위하게 검색했을 때 찾은 대답입니다 ) 내 코드의 다른 부분이 손상됩니다.

다행히도 Microsoft는 기존 Microsoft.Jet.OLEDB.4.0 드라이버를 대체 할 수 있는 64 비트 호환 2010 Office System 드라이버출시했습니다 . 32 비트와 64 비트 서버 모두에서 작동합니다. Excel 파일 조작에 사용했으며 두 환경 모두에서 잘 작동했습니다.그러나이 드라이버는 베타 버전 입니다.

이 드라이버는 Microsoft Access Database Engine 2010 재배포 가능 패키지 에서 다운로드 할 수 있습니다.


ASP.NET에서 문제가 지속되면 응용 프로그램 풀의 고급 설정에서 "32 비트 응용 프로그램 사용"설정을 True로 변경하기 만하면됩니다.


나는 같은 문제를 가지고있다

Microsoft.Jet.OLEDB.4.0 '공급자가 로컬 컴퓨터에 등록되어 있지 않습니다

neo로 답변을 적용 했지만 공급자를 "Provider = Microsoft.ACE.OLEDB.12.0;"으로 변경할 때까지 작동하지 않았습니다 . 연결 문자열에서.

누군가가 같은 문제에 직면하면 이것이 도움이되기를 바랍니다.


나는 그것이 오래된 질문이며 많은 사람들이 대답했다는 것을 알고 있습니다. 그러나 나는 이해를 위해 것들을 요약하고 있습니다.

파일 확장자가 xls이고 OS가 32 비트 인 경우 " Microsoft.Jet.OLEDB.4.0" 만 사용할 수 있습니다 . Microsoft는이 드라이버의 64 비트 버전을 출시하지 않았습니다.

파일 확장자가 xlsx이거나 OS가 64 비트 인 경우 " Microsoft.ACE.OLEDB.12.0" 를 사용해야합니다 . 32/64 비트 모드로 컴파일 된 응용 프로그램은 드라이버 선택에 영향을 미치지 않습니다.

항상 64 비트 드라이버 Microsoft.ACE.OLEDB.12.0를 OS 64 비트에 설치하십시오 . Office 32 비트를 이미 설치 한 경우 / passive 인수를 사용하여 cmd에서 드라이버를 실행해야합니다. 이 핵은 Office 2013까지만 작동하며 Microsoft는 Office 2016 for Microsoft.ACE.OLEDB.16.0 드라이버에서이 대안을 중지했습니다.

AccessDatabaseEngine_x64.exe /passive

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 비트 OS에서 64 비트 액세스 드라이버와 32 비트 OS에서 32 비트 액세스 드라이버를 찾습니다.


내가, 내가 비주얼 스튜디오 2010 할 일이있는 웹 페이지를 동일한 메시지가 한, 나는 시각적 내 프로젝트에서 해당 페이지에 file.xls 읽기는 내 IIS 지역 던져에 넣어되지 않은 문제를 가지고 나 '마이크로 소프트 .Jet.OLEDB.4.0 '공급자가 로컬 컴퓨터에 등록되어 있지 않습니다' , 다음 단계에 따라 문제를 해결했습니다.

1.-IIS 열기
2.- 고급 설정 에서 appPool 변경
3.-true 32 비트 응용 프로그램 활성화합니다.

그리고 그게 전부입니다

추신 : Active Solution Platform에서 Configuration Manager를 X86으로 변경했습니다.


응용 프로그램이 localIIS에서 실행되는 경우 AppPool의 고급 설정 에서 32 비트 응용 프로그램활성화 하여이 문제를 해결할 수 있습니다.

여기에 이미지 설명을 입력하십시오


I had the same issue. I changed the application configuration to x86, then it worked!


I just Changed my Property of project into x64 format

Project---> Properties--->Build--->Target Framework---> X64


We have come across this issue in desktop app.

Dev Environment: Windows 7 Ultimate - 64 bit .Net Framework 4.5 Provider=Microsoft.Jet.OLEDB.4.0

It has been resolved by changing Platform target to X86 from Any CPU. Project Properties >> Build >> Platform Target.

여기에 이미지 설명을 입력하십시오


I ran into this issue with my desktop application ('Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine). I did not have the option to build as a 32 bit app. Hoping this would help others in the same situation.

I did the following and the issue went away:

  1. Installed the 64 bit version of Microsoft Access Database Engine 2010 Redistributable, as suggested by neo

  2. Changed my provider to Microsoft.ACE.OLEDB.12.0


Although a more optimal solution is to simply recompile as suggested above, that requires access to the source code. In my case, I only had the finished .exe and had to use this solution. It uses CorFlags.exe from the .Net SDK to change the loading characteristics of the application.

  1. Download the .Net Framework SDK (I personally used 3.5, but the version used should be at or above the required .Net for your application.
  2. When installing, all you need is CorLibs.exe, so just check Windows Development Tools.
  3. After installation, find your CorFlags.exe. For my install of the .Net Framework 3.5 SDK, it was at C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Open a command prompt and type path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

You're done! This sets the starting flags for your program so that it starts in 32 bit WOW64 mode, and can therefore access microsoft.jet.oledb.4.0.


Change in IIS Settings application pool advanced settings.Enable 32 bit application


Just Change the property based on your machine and all have done :-)

Project---> Properties--->Build--->Target Framework---> X64

or

Project---> Properties--->Build--->Target Framework---> X86


I have changed my connection string from

var myConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Persist Security Info=True;Jet OLEDB:Database Password=;",gisdbPath);

to this:

var myConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Mode=Share Deny None;Data Source={0};user id=Admin;password=;", gisdbPath);

It works fro me never asked for Microsoft.Jet.OLEDB.4.0'registered.


There is indeed no 64 bit version of Jet - and no plans (apparently) to produce one.

You might be able to use the ACE 64 bit driver: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • but I have no idea how that would work if you need to go back to Jet for your 32 bit apps.

However, you may be able to switch the project to 32bit in the Express version (I haven't tried and don't have 2008 installed in any flavour anymore)

Maybe it's time to scrap Access databases altogether, bite the bullet and go for SQL server instead?


I'm using VS2013 for Winforms, the below solution worked for me.


In older versions of IIS, you will not find Advance Settings so to enable Enable 32-bit Applications you have to execute the following commands:

cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

and

%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

Reference : Here


I was getting same exception while running "SQL Server 2014 Import and Export Data (64-bit)" on my Windows 8.1.

To fix the issue this issue I have done the following

started SQL Server 2014 Import and Export Data (32-bit) instead of 64-bit and it is working for me. I haven't changed any IIS setting and not installed any extra software.


I know that I have this problem over and over when I deploy my application on a new server because I'm using this driver to connect to a Excel file. So here it is what I'm doing lately.

There's a Windows Server 2008 R2, I install the Access drivers for a x64 bit machine and I get rid of this message, which makes me very happy just to bump into another.

This one here below works splendidly on my dev machine but on server gives me an error even after installing the latest ODBC drivers, which I think this is the problem, but this is how I solved it.

private const string OledbProviderString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\OlsonWindows.xls;Extended Properties=\"Excel 8.0;HDR=YES\"";

I replace with the new provider like this below:

private const string OledbProviderString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xlsx;Extended Properties='Excel 12.0;HDR=YES;';";

But as I do this, there's one thing you should notice. Using the .xlsx file extension and Excel version is 12.0.

After I get into this error message Error: "Could Not Find Installable ISAM", I decide to change the things a little bit like below:

private const string OledbProviderString =      @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xls;Extended Properties='Excel 8.0;HDR=YES;';"; 

and yes, I'm done with that nasty thing, but here I got another message The Microsoft Access database engine cannot open or write to the file 'time_zone'. It is already opened exclusively by another user, or you need permission to view and write its data. which tells me I'm not far away from solving it.

Maybe there's another process that opened the file meanwhile and all that I have to do is a restart and all will take start smoothly running as expected.


go to Start->Run and type cmd this starts the Command Prompt (also available from Start->Programs->Accessories->Command Prompt)

type cd .. and press return type cd .. and press return again (keep doing this until the prompt shows :> )

now you need to go to a special folder which might be c:\windows\system32 or it might be c:\winnt\system32 or it might be c:\windows\sysWOW64 try typing each of these eg cd c:\windows\sysWOW64 (if it says The system cannot find the path specified, try the next one) cd c:\windows\system32 cd c:\winnt\system32 when one of those doesn't cause an error, stop, you've found the correct folder.

now you need to register the OLE DB 4.0 DLLs by typing these commands and pressing return after each

regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll


Jet에는 64 비트 공급자가 없습니다. Jet to Excel을 포함하여 여러 DB 소스를 지원하려면 최소한 32 비트 프로세스로 실행하기 위해 애플리케이션의 해당 부분이 필요합니다.

x86을 컴파일 할 때 발생하는 오류는 약간 이상합니다. 이 경우 64 비트 어셈블리를 참조하는 방법을 알 수 없습니다.

참고 URL : https://stackoverflow.com/questions/1991643/microsoft-jet-oledb-4-0-provider-is-not-registered-on-the-local-machine

반응형