web-dev-qa-db-de.com

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

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'-Anbieter 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. Im selben Projekt werden jedoch andere DB-Treiber (DB2, SQL usw.) verwendet, um eine Verbindung zu anderen Datenbanken herzustellen. Wenn ich meine App also 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).

182
neo

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

Wenn wir also den Microsoft.Jet.OLEDB.4.0-Treiber in einem 64-Bit-Server verwenden, müssen wir unsere Anwendung zwingen, den 32-Bit-Modus zu verwenden (Dies ist die Antwort, die ich bei einer umfangreichen Suche nach diesem Treiber gefunden habe bekanntes Problem ) und dies führt dazu, dass ein anderer Teil meines Codes beschädigt wird.

Glücklicherweise hat Microsoft jetzt einen 64-Bit-kompatiblen 2010 Office System Driver veröffentlicht, der als Ersatz für den herkömmlichen verwendet werden kann Microsoft.Jet.OLEDB.4.0 Treiber. 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 einwandfrei funktioniert. Aber dieser Treiber befindet sich in [~ # ~] Beta [~ # ~] .

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

229
neo

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

112
Jason Wicker

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 Provider in “Provider = Microsoft.ACE.OLEDB.12.0;” in der Verbindungszeichenfolge geändert habe.

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

45
Iqbal

Ich weiß, dass es ziemlich alte Fragen sind und viele Personen geantwortet 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 ". 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 ". 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.0 unter 64-Bit-Betriebssystem. 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 ab Office 2016 für Microsoft.ACE.OLEDB.16.0-Treiber beendet.

AccessDatabaseEngine_x64.exe /passive

Treiber herunterladen Microsoft.ACE.OLEDB.12.

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 unter 64-Bit-Betriebssystemen nach 64-Bit-Zugriffstreibern und unter 32-Bit-Betriebssystemen nach 32-Bit-Zugriffstreibern.

24

Ich habe die gleiche Meldung, 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 es auf meine IIS local wirf mir ein "Microsoft.Jet.OLEDB.4.0" -Provider ist nicht auf dem lokalen Computer registriert, das Problem wurde behoben, nachdem ich die folgenden Schritte ausgeführt habe.

1. Öffnen Sie IIS
2.-Ändere den appPool an Erweiterte Einstellungen
3.-wahr zu 32-Bit-Anwendung aktivieren.

und das ist alles

ps.Ich habe Configuration Manager auf der Active Solution Platform auf X86 geändert

19
leo

Wenn Ihre Anwendung auf localIIS ausgeführt wird, können Sie dieses Problem lösen, indem Sie 32-Bit-Anwendungen aktivieren in AppPools Erweiterte Einstellungen

enter image description here

17
Mumin Ka

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

8
Kakopappa

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

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

7
Muhamed Shafeeq

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 >> Build >> Plattformziel.

enter image description here

4
Techvalens

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, eine 32-Bit-App zu erstellen. Das zu hoffen würde anderen in der gleichen Situation helfen.

Ich habe Folgendes getan und das Problem wurde 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

2
robinhood9

Obwohl eine optimalere Lösung darin besteht, wie oben vorgeschlagen einfach neu zu kompilieren, ist dafür der Zugriff auf den Quellcode erforderlich. In meinem Fall hatte ich nur die fertige .exe und musste diese Lösung verwenden. Es verwendet CorFlags.exe aus dem .Net SDK, um die Ladeeigenschaften der Anwendung zu ändern.

  1. Laden Sie das .Net Framework SDK herunter (ich persönlich habe .5 verwendet, aber die verwendete Version sollte mindestens die für Ihre Anwendung erforderliche .Net-Version aufweisen.
  2. Für die Installation benötigen Sie lediglich CorLibs.exe, überprüfen Sie einfach die Windows-Entwicklungstools .
  3. Finden Sie nach der Installation Ihr 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 path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Sie sind fertig! Dadurch werden die Startflags für Ihr Programm so festgelegt, dass es im 32-Bit-WOW64-Modus gestartet wird und daher auf Microsoft.jet.oledb.4.0 zugreifen kann.

2
Cullub

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; Kennwort =;", gisdbPath);

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

1
Dilhan RK

Ä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

1
Ajmal

Ändern in IIS Einstellungen Anwendungspool Erweiterte Einstellungen. 32-Bit-Anwendung aktivieren

1
dpsrikanth

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 die Eingabetaste erneut.

jetzt müssen Sie zu einem speziellen Ordner gehen, der c:\windows\system32 oder c:\winnt\system32 oder c:\windows\sysWOW64 sein kann. Geben Sie jeden dieser Ordner ein, z. B. cd c:\windows\sysWOW64 (wenn angezeigt wird, dass 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 von diesen keinen Fehler verursacht, halten Sie an, Sie haben den gefunden richtiger Ordner.

jetzt müssen Sie die OLE DB 4.0-DLLs registrieren, indem Sie diese Befehle eingeben und nach jedem Befehl die Eingabetaste drücken

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

0
user1089766

Ich habe dieselbe Ausnahme beim Ausführen von "SQL Server 2014-Import und -Export von Daten (64-Bit)" unter Windows 8.1 erhalten.

Um dieses Problem zu beheben, habe ich Folgendes getan

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

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

  • aber ich habe 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 2008 nicht mehr in irgendeiner Version ausprobiert und installiert).

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

0
Anant Dabhi

In älteren IIS-Versionen finden Sie Advance Settings Nicht. Um Enable 32-bit Applications Zu aktivieren, müssen Sie die folgenden Befehle ausführen:

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

und

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

Hinweis: hier

0
Usman Khalid

Ich verwende VS2013 für Winforms. Die folgende Lösung hat bei mir funktioniert.

0
A Ghazal

Ich weiß, dass ich dieses Problem immer wieder habe, wenn ich meine Anwendung auf einem neuen Server bereitstelle, weil 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 eine x64-Bit-Maschine und ich werde diese Meldung los, was mich sehr glücklich macht, nur auf eine andere zu stoßen.

Dieser hier unten funktioniert prächtig auf meinem Dev-Rechner, aber auf dem Server wird mir auch nach der Installation der neuesten ODBC Treiber ein Fehler angezeigt. Ich denke, das 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 mit dem 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 tue, gibt es eine Sache, die Sie beachten sollten. Verwenden der XLSX-Dateierweiterung und der Excel-Version ist 12.0.

Nachdem ich in diese Fehlermeldung geraten bin Fehler: "Installierbares ISAM konnte nicht gefunden werden"Ich beschließe, 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 fertig mit dem bösen Ding, aber hier habe ich eine andere Nachricht Das Microsoft Access-Datenbankmodul kann die Datei 'time_zone' nicht öffnen oder in sie schreiben. Es ist bereits exklusiv von einem anderen Benutzer geöffnet, oder Sie benötigen die Berechtigung zum Anzeigen und Schreiben der Daten. das sagt mir, dass ich nicht weit davon entfernt bin, es zu lösen.

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

0
Nick