Der Microsoft.Jet.OLEDB.4.0-Anbieter ist nicht auf dem lokalen Computer registriert

191

Ich habe eine in .NET 3.5 entwickelte Windows-Anwendung auf einem 32-Bit-Windows 2008-Server erstellt. Bei der Bereitstellung der Anwendung auf einem 64-Bit-Server wird der Fehler "Microsoft.Jet.OLEDB.4.0 'Provider ist nicht auf dem lokalen Computer registriert" angezeigt.

Als Lösung für dieses Problem habe ich die Build-Eigenschaft des Projekts in X86 geändert, sodass es im 32-Bit-Modus erstellt und das Projekt auf dem 32-Bit-Computer neu erstellt wird. Das gleiche Projekt verwendet jedoch andere DB-Treiber (DB2, SQL usw.), um eine Verbindung zu anderen Datenbanken herzustellen. Wenn ich meine App erneut im 64-Bit-Betriebssystem bereitstelle, wird die Ausnahme "Versuch, eine 64-Bit-Assembly auf einer 32-Bit-Plattform zu laden" ausgelöst.

Ich verwende den Microsoft.Jet.OLEDB.4.0-Treiber zum Lesen und Schreiben in Excel (.xls).

Neo
quelle

Antworten:

238

Ich habe eine Lösung für dieses Problem gefunden. Das in meiner Frage beschriebene Problem trat im Wesentlichen aufgrund der Inkompatibilität des Microsoft.Jet.OLEDB.4.0-Treibers in einem 64-Bit-Betriebssystem auf.

Wenn wir also den Microsoft.Jet.OLEDB.4.0-Treiber auf einem 64-Bit-Server verwenden, müssen wir unsere Anwendung zwingen, im 32-Bit-Modus zu arbeiten (dies ist die Antwort, die ich gefunden habe, als ich nach diesem bekannten Problem gesucht habe ). und das führt dazu, dass ein anderer Teil meines Codes kaputt geht.

Glücklicherweise hat Microsoft jetzt einen 64-Bit-kompatiblen 2010 Office System-Treiber veröffentlicht , der als Ersatz für den traditionellen Microsoft.Jet.OLEDB.4.0-Treiber verwendet werden kann. Es funktioniert sowohl auf 32-Bit- als auch auf 64-Bit-Servern. Ich habe es für die Bearbeitung von Excel-Dateien verwendet und es hat in beiden Umgebungen gut funktioniert.Aber dieser Treiber ist in BETA .

Sie können diesen Treiber von Microsoft Access Database Engine 2010 Redistributable herunterladen

Neo
quelle
6
Achten Sie auch besonders auf die Anweisungen auf diesem Link :)
Mark
4
Ich hatte das gleiche Problem. Ich habe die Anwendungskonfiguration auf x86 geändert, dann hat es funktioniert!
Skpaul
9
Außerdem musste ich die Verbindungszeichenfolge von Microsoft.Jet.OLEDB.4.0 in Microsoft.ACE.OLEDB.12.0
ändern
16
Ja, obwohl ein 64-Bit-kompatibles Access Database Engine verfügbar ist, muss keine 32-Bit-Version von MS Office-Produkten bereits auf dem System installiert sein (z. B. 32-Bit-MS Word), was ein großes Problem darstellt. Die Problemumgehung besteht darin, dass Sie die 32-Bit-Version von Access Database Engine 2010 verwenden und die Ausführung Ihrer .NET-Anwendung im 32-Bit-Modus erzwingen (z. B. durch Auswahl der x86-Plattform in Configuration Manager). Die richtige Lösung besteht darin, MS Access durch eine bessere Alternative zu ersetzen.
Massood Khaari
2
noob frage: kann ich diesen treiber wie "innerhalb meiner anwendung" verteilen oder muss jeder benutzer, der meine anwendung verwenden möchte, ihn manuell installieren?
philx_x
117

Wenn das Problem in ASP.NET weiterhin besteht, musste ich lediglich die Einstellung "32-Bit-Anwendungen aktivieren" in den erweiterten Einstellungen für den Anwendungspool auf "Wahr" ändern.

Jason Wicker
quelle
Ich habe 64-Bit-ODBC verwendet und diese Änderung führte zu Datenbankfehlern. Ich habe es aber korrigiert. Falls auch jemand darauf stößt, müssen Sie 32-Bit-ODBC-Treiber installieren und dann Ihren DSN darin erstellen.
Farhan Hafeez
2
Es ist jetzt durchaus möglich, dies vollständig in 64-Bit-Code zu tun. Installieren Sie die weiterverteilbare Verknüpfung in der Antwort von neo und verwenden Sie dann die in der Antwort von Iqbal vorgeschlagene Provider-Zeichenfolge . Dann stimmen Sie diesen beiden Antworten zu. Das ist es!
Roman
Dies hat das Problem für mich unter Windows Server 2008 R2 behoben, nachdem ich die 32-Bit Access DB Engine Redist installiert hatte .
Chris Pickford
2
Der Nachteil ist, dass der Pool im 32-Bit-Modus ausgeführt wird. Wir werden stattdessen zu ACE wechseln, um dies zu vermeiden.
WTJONS
arbeitete auch für mich mit Windows Forms. überhaupt kein ASP.NET-Code
philx_x
52

Ich habe das gleiche Problem

Der Microsoft.Jet.OLEDB.4.0-Anbieter ist nicht auf dem lokalen Computer registriert

Ich habe die Antwort von neo angewendet, aber es hat nicht funktioniert, bis ich den Anbieter auf "Provider = Microsoft.ACE.OLEDB.12.0;" geändert habe. in Verbindungszeichenfolge.

Hoffe, dies wird helfen, wenn jemand das gleiche Problem hat.

Iqbal
quelle
4
Das ist es! Installieren Sie für einen 64-Bit-Server die durch neo verknüpfte weiterverteilbare Datei (natürlich die 64-Bit-Variante) und wechseln Sie dann den in dieser Antwort angegebenen Anbieter. Dann funktioniert es.
Roman Starkov
Sie haben Recht, Romkyns. Ich habe bereits gesagt, ich habe neo solution angewendet und dann den Provider gewechselt. Aber danke, dein Kommentar macht es klarer. Vielen Dank Romkyns
Iqbal
Microsoft.Jet.OLEDB.4.0 durch Microsoft.ACE.OLEDB.12.0 ersetzt; in app.config und alles hat funktioniert.
AVEbrahimi
1
Ich fand, dass dies funktionierte, während die Beschränkung der App auf 32-Bit überhaupt keinen Unterschied machte.
Ryan Lundy
In meinem Fall: "Microsoft.ACE.OLEDB.12.0 nicht registriert", :(
César León
29

Ich weiß, dass es ziemlich alte Fragen sind und viele Personen sie beantwortet haben. aber ich fasse die Dinge zum Verständnis zusammen:

Wenn die Dateierweiterung xls und das Betriebssystem 32 Bit ist, können nur Sie " Microsoft.Jet.OLEDB.4.0" verwenden. Microsoft hat keine 64-Bit-Version dieses Treibers veröffentlicht.

Wenn die Dateierweiterung xlsx oder das Betriebssystem 64 Bit ist, müssen Sie " Microsoft.ACE.OLEDB.12.0" verwenden. Die im 32/64-Bit-Modus kompilierte Anwendung hat keinen Einfluss auf die Auswahl des Treibers.

Installieren Sie immer den 64-Bit-Treiber von Microsoft.ACE.OLEDB.12.0OS 64-Bit. Wenn Sie Office 32 Bit bereits installiert haben, müssen Sie den Treiber von cmd mit dem Argument / passive ausführen. Dieser Hack funktioniert nur bis Office 2013. Microsoft hat diese Problemumgehung von Office 2016 für Microsoft.ACE.OLEDB.16.0-Treiber gestoppt.

AccessDatabaseEngine_x64.exe /passive

Laden Sie die Treiber Microsoft.ACE.OLEDB.12.0 herunter

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\"";
}

Wenn die Anwendung mit dem AnyCPU-Flag kompiliert wird, sucht sie nach 64-Bit-Zugriffstreibern unter 64-Bit-Betriebssystemen und 32-Bit-Zugriffstreibern unter 32-Bit-Betriebssystemen.

Romil Kumar Jain
quelle
1
Vielen Dank für Ihre Antwort. Ich verwende jedoch VS2015 unter Windows 10 und X64. Als ich die Projektkonfiguration von AnyCPU auf X86 änderte, verschwand das Problem. Ich musste keine zusätzlichen Treiber installieren.
NoChance
@NoChance Ich denke, Sie haben Office 64 Bit bereits auf Ihrem Computer installiert und es enthält bereits Microsoft.ACE.OLEDB.12.0-Treiber.
Romil Kumar Jain
Vielen Dank für Ihre Antwort, ich habe nur Office 2007.
NoChance
19

Ich habe die gleiche Nachricht, ich habe eine Webseite mit do in Visual Studio 2010, ich habe eine file.xls auf dieser Seite gelesen, in meinem Projekt hat Visual kein Problem, wenn ich sie auf mein IIS-Lokal stelle, wirf mir ein 'Microsoft .Jet.OLEDB.4.0 'Anbieter ist nicht auf dem lokalen Computer registriert' , ich habe das Problem als nächstes behoben, indem ich die folgenden Schritte ausgeführt habe:

1.-Öffnen Sie IIS
2.-Ändern Sie den appPool in den erweiterten Einstellungen
3.-true, um eine 32-Bit-Anwendung zu aktivieren.

und das ist alles

Ich habe Configuration Manager auf Active Solution Platform in X86 geändert

Löwe
quelle
Dadurch wird Ihre App gezwungen, im 32-Bit-Modus ausgeführt zu werden. Sie müssen diese Einstellung deaktivieren, wenn Sie die 4-GB-Barriere umgehen möchten.
Brain2000
18

Wenn Ihre Anwendung unter localIIS ausgeführt wird, können Sie dieses Problem lösen, indem Sie 32-Bit-Anwendungen in den erweiterten Einstellungen von AppPool aktivieren

Geben Sie hier die Bildbeschreibung ein

Mumin Ka
quelle
8

Ich hatte das gleiche Problem. Ich habe die Anwendungskonfiguration auf geändert x86, dann hat es funktioniert!

Kakopappa
quelle
Wie ändere ich diese Konfiguration? Ich habe ein Website-Projekt erstellt
SHEKHAR SHETE
7

Ich habe gerade meine Projekteigenschaft in das x64-Format geändert

Projekt ---> Eigenschaften ---> Erstellen ---> Ziel-Framework ---> X64

Muhamed Shafeeq
quelle
5

Wir sind auf dieses Problem in der Desktop-App gestoßen.

Entwicklungsumgebung: Windows 7 Ultimate - 64-Bit-.Net Framework 4.5-Anbieter = Microsoft.Jet.OLEDB.4.0

Es wurde behoben, indem das Plattformziel von einer beliebigen CPU auf X86 geändert wurde. Projekteigenschaften >> Erstellen >> Plattformziel.

Geben Sie hier die Bildbeschreibung ein

Techvalens
quelle
2

Ich bin mit meiner Desktop-Anwendung auf dieses Problem gestoßen (der Anbieter 'Microsoft.Jet.OLEDB.4.0' ist nicht auf dem lokalen Computer registriert). Ich hatte nicht die Möglichkeit, als 32-Bit-App zu erstellen. In der Hoffnung, dass dies anderen in der gleichen Situation helfen würde.

Ich habe Folgendes getan und das Problem ist behoben:

  1. Installierte die 64-Bit-Version von Microsoft Access Database Engine 2010 Redistributable , wie von neo vorgeschlagen

  2. Mein Provider wurde in Microsoft.ACE.OLEDB.12.0 geändert

Robinhood9
quelle
2

Obwohl eine optimalere Lösung darin besteht, einfach wie oben vorgeschlagen neu zu kompilieren, erfordert dies den Zugriff auf den Quellcode. In meinem Fall hatte ich nur die fertige EXE-Datei und musste diese Lösung verwenden. Es wird CorFlags.exeaus dem .Net SDK verwendet, um die Ladeeigenschaften der Anwendung zu ändern.

  1. Laden Sie das .Net Framework SDK herunter (ich persönlich habe 3.5 verwendet , aber die verwendete Version sollte mindestens das für Ihre Anwendung erforderliche .Net sein.
  2. Bei der Installation benötigen Sie CorLibs.exelediglich die Windows-Entwicklungstools .
  3. Suchen Sie nach der Installation Ihre CorFlags.exe. Für meine Installation des .Net Framework 3.5 SDK war es bei C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Öffnen Sie eine Eingabeaufforderung und geben Sie ein path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Du bist fertig! Dadurch werden die Startflags für Ihr Programm so gesetzt, dass es im 32-Bit-WOW64-Modus startet und daher auf microsoft.jet.oledb.4.0 zugreifen kann.

Cullub
quelle
1

Änderung der erweiterten Einstellungen des Anwendungspools für IIS-Einstellungen. 32-Bit-Anwendung aktivieren

dpsrikanth
quelle
1

Ändern Sie einfach die Eigenschaft basierend auf Ihrer Maschine und alle haben getan :-)

Projekt ---> Eigenschaften ---> Erstellen ---> Ziel-Framework ---> X64

oder

Projekt ---> Eigenschaften ---> Erstellen ---> Ziel-Framework ---> X86

Ajmal
quelle
1

Ich habe meine Verbindungszeichenfolge von geändert

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

dazu:

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Datenquelle = {0}; Benutzer-ID = Admin; Passwort =;", gisdbPath);

Es funktioniert für mich nie nach Microsoft.Jet.OLEDB.4.0'registriert gefragt.

Dilhan RK
quelle
0

Es gibt in der Tat keine 64-Bit-Version von Jet - und (anscheinend) keine Pläne, eine zu produzieren.

Möglicherweise können Sie den ACE 64-Bit-Treiber verwenden: http://www.microsoft.com/en-us/download/details.aspx?displaylang=de&id=23734

  • Ich habe jedoch keine Ahnung, wie das funktionieren würde, wenn Sie für Ihre 32-Bit-Apps zu Jet zurückkehren müssen.

Möglicherweise können Sie das Projekt jedoch in der Express-Version auf 32 Bit umstellen (ich habe es nicht versucht und habe 2008 nicht mehr in irgendeiner Variante installiert).

Vielleicht ist es an der Zeit, Access-Datenbanken komplett zu verschrotten, die Kugel zu beißen und stattdessen auf SQL Server zu setzen?

Anant Dabhi
quelle
0

In älteren Versionen von IIS finden Sie dies nicht, Advance Settingsdamit Enable 32-bit ApplicationsSie die folgenden Befehle ausführen müssen:

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

und

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

Referenz: Hier

Usman Khalid
quelle
0

Beim Ausführen von "SQL Server 2014 Importieren und Exportieren von Daten (64-Bit)" unter Windows 8.1 wurde dieselbe Ausnahme angezeigt.

Um das Problem zu beheben, habe ich Folgendes getan

SQL Server 2014 gestartet Importieren und Exportieren von Daten (32-Bit) anstelle von 64-Bit und es funktioniert für mich. Ich habe keine IIS-Einstellung geändert und keine zusätzliche Software installiert.

Banketeshvar Narayan
quelle
0

Ich weiß, dass dieses Problem immer wieder auftritt, wenn ich meine Anwendung auf einem neuen Server bereitstelle, da ich diesen Treiber verwende, um eine Verbindung zu einer Excel-Datei herzustellen. Also hier ist es, was ich in letzter Zeit mache.

Es gibt einen Windows Server 2008 R2, ich installiere die Access-Treiber für einen x64-Bit-Computer und entferne diese Meldung, was mich sehr freut, wenn ich nur auf einen anderen stoße.

Dieser hier unten funktioniert hervorragend auf meinem Entwicklungscomputer, aber auf dem Server wird mir auch nach der Installation der neuesten ODBC-Treiber ein Fehler angezeigt. Ich denke, dies ist das Problem, aber so habe ich es gelöst.

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

Ich ersetze durch den neuen Anbieter wie folgt:

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

Aber wenn ich das mache, gibt es eine Sache, die Sie beachten sollten. Die Verwendung der XLSX-Dateierweiterung und der Excel-Version ist 12.0.

Nachdem ich diese Fehlermeldung erhalten habe, Fehler: "Installierbares ISAM konnte nicht gefunden werden" , entscheide ich mich, die folgenden Dinge ein wenig zu ändern:

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

und ja, ich bin mit dieser fiesen Sache fertig, aber hier habe ich eine andere Nachricht erhalten. Das Microsoft Access-Datenbankmodul kann die Datei 'time_zone' nicht öffnen oder in sie schreiben. Es wird bereits ausschließlich von einem anderen Benutzer geöffnet, oder Sie benötigen die Berechtigung zum Anzeigen und Schreiben der Daten. was mir sagt, dass ich nicht weit davon entfernt bin, es zu lösen.

Vielleicht gibt es einen anderen Prozess, der die Datei inzwischen geöffnet hat, und alles, was ich tun muss, ist ein Neustart, und alles läuft wie erwartet reibungslos.

Nick
quelle
0

Gehen Sie zu Start-> Ausführen und geben Sie cmd ein. Dadurch wird die Eingabeaufforderung gestartet (auch verfügbar unter Start-> Programme-> Zubehör-> Eingabeaufforderung).

Geben Sie cd .. ein und drücken Sie die Eingabetaste. Geben Sie cd .. ein und drücken Sie erneut die Eingabetaste (tun Sie dies so lange, bis die Eingabeaufforderung Folgendes anzeigt:>)

Jetzt müssen Sie zu einem speziellen Ordner wechseln, der c: \ windows \ system32 oder c: \ winnt \ system32 oder c: \ windows \ sysWOW64 sein kann. Versuchen Sie, jeden dieser Ordner einzugeben, z. B. cd c: \ windows \ sysWOW64 (wenn das System den angegebenen Pfad nicht finden kann, versuchen Sie es mit dem nächsten) cd c: \ windows \ system32 cd c: \ winnt \ system32 Wenn einer dieser Pfade keinen Fehler verursacht, stoppen Sie, Sie haben den gefunden richtiger Ordner.

Jetzt müssen Sie die OLE DB 4.0-DLLs registrieren, indem Sie diese Befehle eingeben und nacheinander die Eingabetaste drücken

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

user1089766
quelle
-2

Es gibt keinen 64-Bit-Anbieter für Jet. Wenn Sie mehrere DB-Quellen unterstützen möchten, einschließlich Jet to Excel, benötigen Sie mindestens diesen Teil Ihrer Anwendung, um in einem 32-Bit-Prozess ausgeführt zu werden.

Der Fehler, den Sie beim Kompilieren für x86 erhalten, ist etwas seltsam. Ich kann nicht sehen, wie Sie in diesem Fall auf 64-Bit-Assemblys verweisen würden.

AnthonyWJones
quelle
Anthony, wie kann ich nur einen Teil eines Projekts für den 32-Bit-Modus erstellen? Alle diese DB-Verbindungen, einschließlich Excel, werden unter einem Projekt zusammengefasst. Außerdem habe ich den Fehler in x86 erhalten, wenn ich versuche, ihn im 64-Bit-Betriebssystem auszuführen. Ich denke, das liegt daran, dass der im 64-Bit-Betriebssystem installierte DB2-Treiber eine 64-Bit-Version ist und den Fehler verursacht, wenn er von der Anwendung referenziert wird, die für die Ausführung im 32-Bit-Modus konfiguriert ist.
Neo
Wenn das Aufteilen des Projekts in Multipe-Exes mühsamer ist als es sich lohnt, müssen Sie nur noch auf 32 Bit kompilieren. In Bezug auf das DB2-Problem sollten Sie nach einigen DB2-Experten für diese möglicherweise andere DB2-spezifische Frage suchen. In der Regel installiert SQL Server sowohl 32-Bit- als auch 64-Bit-Anbieter auf einem 64-Bit-Computer.
AnthonyWJones
Danke Anthony für deine Kommentare. Nachdem ich viel zu diesem Thema gesucht und Ihre Kommentare gelesen habe, muss ich den Teil des Projekts erstellen, der das Excel-Blatt als separates Projekt verarbeitet und in einer 32-Bit-Version kompiliert.
Neo
3
Damit die Leute wissen, wird A2010 einen 64-Bit-Jet haben.
David-W-Fenton
Danke David, 2010 habe einen 64-Bit-Treiber
neo