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


191

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 드라이버를 사용하고 있습니다.

답변:


239

이 문제에 대한 해결책을 찾았습니다. 필자의 질문에 설명 된 문제는 기본적으로 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 재배포 가능 패키지 에서 다운로드 할 수 있습니다.


6
또한 해당 링크의 지침에 특별한주의를 기울이십시오 :)
Mark

4
나는 같은 문제가 있었다. 응용 프로그램 구성을 x86으로 변경 한 다음 작동했습니다!
skpaul

9
또한 연결 문자열을 Microsoft.Jet.OLEDB.4.0을 사용하여 Microsoft.ACE.OLEDB.12.0으로 변경해야했습니다.
Spikolynn

16
예, 64 비트 호환 Access 데이터베이스 엔진을 사용할 수 있지만 시스템에 32 비트 버전의 MS Office 제품이 설치되어 있지 않아야합니다 (예 : 32 비트 MS Word). 해결 방법은 32 비트 버전의 Access Database Engine 2010을 사용하고 .NET 응용 프로그램을 32 비트 모드로 강제 실행하는 것입니다 (예 : Configuration Manager에서 x86 플랫폼 선택). 올바른 해결책은 MS Access를 더 나은 대안으로 대체하는 것입니다.
Massood Khaari

3
멍청한 질문 : "내 응용 프로그램 내에서"와 같이이 드라이버를 배포 할 수 있습니까? 아니면 내 응용 프로그램을 사용하려는 모든 사용자가 수동으로 설치해야합니까?
philx_x

117

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


64 비트 ODBC를 사용하고 있는데이 변경으로 인해 데이터베이스 오류가 발생했습니다. 그래도 수정했습니다. 누군가이 문제가 발생하면 32 비트 ODBC 드라이버를 설치 한 다음 DSN을 만들어야합니다.
Farhan Hafeez

2
이제 64 비트 코드로 완전히 수행 할 수 있습니다. neo 's answer에 링크 된 재배포 가능 파일을 설치 한 다음 Iqbal 's answer 에서 제안 된 제공자 문자열을 사용하십시오 . 그런 다음 두 가지 답변을 모두 찬성하십시오. 그게 다야!
로마 Starkov

32 비트 액세스 DB 엔진 Redist 를 설치 한 후 Windows Server 2008 R2에서 문제가 해결되었습니다 .
Chris Pickford

2
단점은 풀이 32 비트 모드에서 실행된다는 것입니다. 이를 방지하기 위해 ACE로 대신 전환합니다.
wtjones

Windows Forms와 함께 저를 위해 일했습니다. ASP.NET 코드가 전혀 없음
philx_x

53

나도 같은 문제가있어

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

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

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


4
이거 야! 64 비트 서버의 경우, 설치 재배포 (분명히 64 비트 변형) 신으로 연결 한 다음이 답변에 명시된 공급자를 변경 한 후 그것을 작동합니다.
Roman Starkov

당신은 바로 롬킨입니다. 나는 이미 네오 솔루션을 적용했다고 말한 다음 공급자를 변경합니다. 그러나 귀하의 의견에 감사드립니다. 감사합니다 많은 romkyns
Iqbal

Microsoft.Jet.OLEDB.4.0을 Microsoft.ACE.OLEDB.12.0으로 대체했습니다. app.config에서 모든 것이 작동했습니다.
AVEbrahimi

1
앱이 32 비트로 제한되는 동안 아무런 효과가 없었습니다.
Ryan Lundy

내 경우 : "Microsoft.ACE.OLEDB.12.0 등록 안 됨", :(
César León

29

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

파일 확장자가 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에서 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 비트 액세스 드라이버를 찾습니다.


1
그러나 귀하의 답변에 감사드립니다 .Windows 10에서 VS2015를 사용하고 X64를 사용하고 있습니다. AnyCPU에서 X86으로 프로젝트 구성을 변경하면 문제가 해결되었습니다. 추가 드라이버를 설치할 필요가 없습니다.
NoChance

@NoChance 이미 컴퓨터에 Office 64 비트를 설치했으며 이미 Microsoft.ACE.OLEDB.12.0 드라이버가 포함되어 있다고 생각합니다.
Romil Kumar Jain 2016

답장을 보내 주셔서 Office 2007 만 있습니다.
NoChance

19

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

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

그리고 그게 전부입니다

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


그러면 앱이 32 비트 모드로 실행됩니다. 4GB 장벽을 피하려면이 설정을 해제해야합니다.
Brain2000

18

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

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


8

나는 같은 문제가 있었다. 응용 프로그램 구성을로 변경 x86한 다음 작동했습니다!


이 구성을 변경하는 방법? 웹 사이트 유형 프로젝트를 만들었습니다
SHEKHAR SHETE

7

방금 프로젝트 속성을 x64 형식으로 변경했습니다.

프로젝트 ---> 속성 ---> 빌드 ---> 대상 프레임 워크 ---> X64


5

데스크톱 앱에서이 문제가 발생했습니다.

개발 환경 : Windows 7 Ultimate-64 비트 .Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

모든 CPU에서 플랫폼 대상을 X86으로 변경하여 해결되었습니다. 프로젝트 속성 >> 빌드 >> 플랫폼 대상.

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


2

내 데스크톱 응용 프로그램에서이 문제가 발생했습니다 ( 'Microsoft.Jet.OLEDB.4.0'공급자가 로컬 컴퓨터에 등록되어 있지 않습니다). 32 비트 앱으로 빌드 할 수있는 옵션이 없습니다. 이것이 같은 상황에서 다른 사람들을 도울 것입니다.

나는 다음을했고 문제는 사라졌다.

  1. neo에서 제안한대로 64 비트 버전의 Microsoft Access Database Engine 2010 재배포 가능 패키지 설치

  2. 공급자를 Microsoft.ACE.OLEDB.12.0으로 변경했습니다.


2

더 최적의 솔루션은 위에서 제안한대로 단순히 다시 컴파일하는 것이지만 소스 코드에 액세스해야합니다. 필자의 경우 완성 된 .exe 만 있었고이 솔루션을 사용해야했습니다. CorFlags.exe.Net SDK에서 사용 하여 애플리케이션의로드 특성을 변경합니다.

  1. .Net Framework SDK를 다운로드하십시오 (개인적으로 3.5를 사용 했지만 사용 된 버전은 응용 프로그램에 필요한 .Net 이상이어야합니다.
  2. 설치할 때 필요한 것은 Windows 개발 도구CorLibs.exe 만 확인 하면 됩니다.
  3. 설치 후를 찾으십시오 CorFlags.exe. .Net Framework 3.5 SDK를 설치하려면 다음 위치에 C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin있습니다.
  4. 명령 프롬프트를 열고을 입력하십시오 path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

끝났습니다! 32 비트 WOW64 모드에서 시작되도록 프로그램의 시작 플래그를 설정하므로 microsoft.jet.oledb.4.0에 액세스 할 수 있습니다.


1

IIS 설정 응용 프로그램 풀 고급 설정 변경 32 비트 응용 프로그램 사용


1

컴퓨터를 기반으로 속성을 변경하면 모든 작업이 완료됩니다 :-)

프로젝트 ---> 속성 ---> 빌드 ---> 대상 프레임 워크 ---> X64

또는

프로젝트 ---> 속성 ---> 빌드 ---> 대상 프레임 워크 ---> X86


1

연결 문자열을에서

var myConnectionString = string.Format ( "Provider = Microsoft.Jet.OLEDB.4.0; 데이터 소스 = {0}; 지속적인 보안 정보 = 참; Jet OLEDB : 데이터베이스 암호 =;", gisdbPath);

이에:

var myConnectionString = string.Format ( "Provider = Microsoft.Jet.OLEDB.4.0; Mode = 공유 거부 없음; 데이터 소스 = {0}; 사용자 id = Admin; password =;", gisdbPath);

Microsoft.Jet.OLEDB.4.0'registered를 요청하지 않았으므로 작동합니다.


0

실제로 64 비트 버전의 Jet는 없으며 하나도 생산할 계획이 없습니다.

ACE 64 비트 드라이버를 사용할 수 있습니다. http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • 그러나 32 비트 응용 프로그램을 위해 Jet로 돌아 가야하는 경우 어떻게 작동하는지 잘 모르겠습니다.

그러나 Express 버전에서 프로젝트를 32 비트로 전환 할 수 있습니다 (더 이상 시도하지 않았으며 더 이상 2008 버전을 설치하지 않았습니다)

어쩌면 Access 데이터베이스를 모두 스크랩하고 총알을 물고 대신 SQL Server를 사용해야 할 때입니까?



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

참조 : 여기


0

Windows 8.1에서 "SQL Server 2014 데이터 가져 오기 및 내보내기 (64 비트)"를 실행하는 동안 동일한 예외가 발생했습니다.

이 문제를 해결하기 위해 다음을 수행했습니다.

64 비트 대신 SQL Server 2014 데이터 가져 오기 및 내보내기 (32 비트)를 시작했으며 저에게 효과적입니다. IIS 설정을 변경하지 않았으며 추가 소프트웨어를 설치하지 않았습니다.


0

이 드라이버를 사용하여 Excel 파일에 연결하기 때문에 새 서버에 응용 프로그램을 배포 할 때이 문제가 계속 발생한다는 것을 알고 있습니다. 그래서 여기 내가 최근에하고있는 일입니다.

Windows Server 2008 R2가 있으며 x64 비트 시스템 용 액세스 드라이버를 설치하고이 메시지를 제거하여 다른 메시지에 부딪히는 것을 매우 기쁘게합니다.

아래 의이 하나는 내 dev 컴퓨터에서 훌륭하게 작동하지만 서버에서 최신 ODBC 드라이버를 설치 한 후에도 오류가 발생합니다. 이것이 문제라고 생각하지만 이것이 내가 해결 한 방법입니다.

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

아래와 같이 새 공급자로 교체합니다.

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

하지만이 작업을 수행 할 때주의해야 할 것이 있습니다. .xlsx 파일 확장명 및 Excel 버전 사용은 12.0입니다.

이 오류 메시지 "Error :"Could Not Foundable ISAM "을 찾은 후 다음과 같이 조금 변경하기로 결정했습니다.

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

그리고 네, 그 불쾌한 일을 끝 냈지만 여기에 다른 메시지가 있습니다 . Microsoft Access 데이터베이스 엔진은 'time_zone'파일을 열거 나 쓸 수 없습니다. 이미 다른 사용자가 독점적으로 열었거나 데이터를보고 쓸 수있는 권한이 필요합니다. 나는 그것을 해결하는 데 멀지 않다고 말합니다.

어쩌면 파일을 여는 또 다른 프로세스가있을 수 있으며 내가해야 할 일은 다시 시작하기 만하면 모든 것이 예상대로 원활하게 시작됩니다.


0

시작-> 실행으로 이동하여 cmd를 입력하면 명령 프롬프트가 시작됩니다 (시작-> 프로그램-> 액세서리-> 명령 프롬프트에서도 사용 가능)

cd ..를 입력하고 return type cd ..를 누른 후 return을 다시 누르십시오 (프롬프트가 다음과 같이 표시 될 때까지 계속하십시오 :>).

이제 c : \ windows \ system32 또는 c : \ winnt \ system32 또는 c : \ windows \ sysWOW64 일 수있는 특수 폴더로 이동해야합니다. 예 : cd c : \ windows \ sysWOW64 (시스템이 지정된 경로를 찾을 수 없으면 다음 경로를 시도하십시오) cd c : \ windows \ system32 cd c : \ winnt \ system32 다음 중 하나가 오류를 발생시키지 않으면 중지하십시오. 올바른 폴더.

이제 이러한 명령을 입력하고 각 명령 후에 return 키를 눌러 OLE DB 4.0 DLL을 등록해야합니다

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


-2

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

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


Anthony, 프로젝트의 일부만 32 비트 모드로 실행하려면 어떻게해야합니까? Excel을 포함한 이러한 모든 DB 연결은 하나의 프로젝트에 포함됩니다. 또한 64 비트 OS에서 실행하려고 할 때 x86에 오류가 발생했습니다. 64 비트 OS에 설치된 DB2 드라이버가 64 비트 버전이고 32 비트 모드로 실행되도록 구성된 응용 프로그램에서 참조 될 때 오류가 발생하기 때문입니다.
neo

프로젝트를 여러 exe로 나누는 것이 그보다 더 번거 롭다면 32 비트로 컴파일하는 것만 남습니다. DB2 문제에 관해서는 아마도 다른 DB2 관련 질문에 대한 일부 DB2 전문가를 찾을 것입니다. 일반적으로 SQL Server는 64 비트 컴퓨터에 32 비트 및 64 비트 공급자를 모두 설치합니다.
AnthonyWJones

의견을 보내 주셔서 감사합니다. 이 문제에 대한 많은 검색과 의견에서 내가 이해 한 바에 따르면 Excel 시트를 별도의 프로젝트로 처리하고 32 비트 버전으로 컴파일 해야하는 프로젝트의 일부를 만들어야합니다.
neo

3
사람들이 알다시피 A2010에는 64 비트 Jet가있을 것입니다.
David-W-Fenton

감사합니다 David, 2010에는 64 비트 드라이버가 있습니다
neo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.