it-swarm.com.de

Klasse nicht registriert Fehler

Beim Ausführen einer Anwendung von Visual Studio 2012 auf 64-Bit-Computern wird die folgende Fehlermeldung angezeigt: 

Das Abrufen der COM-Klassen-Factory für die Komponente mit der CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} ist aufgrund des folgenden Fehlers fehlgeschlagen: 80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Ich verwende Inventor Packandgo DLL-Bibliothek in Visualstudio.

Weiß jemand was ist der Fehler?

11
Arun

Mein Problem und die Lösung

  1. Ich habe eine 32-Bit-Drittanbieter-DLL, die ich im Jahr 2008 R2-Maschine installiert habe, die 64-Bit ist.

  2. Ich habe einen WCF-Dienst in .NET 4.5 Framework erstellt, der die 32-Bit-Drittanbieter-DLL für den Prozess aufruft. Jetzt habe ich build property auf 'any' cpu als Ziel gesetzt und auf der 64-Bit-Maschine bereitgestellt. 

  3. Wenn Ii versucht hat, den wcf-Dienst aufzurufen, wurde der Fehler "80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG")

  4. Jetzt benutzte Ii ProcMon.exe, um das Problem mit der Registrierungsdatenbank com zu verfolgen, und stellte fest, dass der Prozess unter HKLM\CLSID und HKCR\CLSID nach dem Registrierungseintrag sucht, an dem kein Eintrag vorhanden ist.

  5. Ich musste wissen, dass Microsoft die 32-Bit-COM-Komponenten nicht in den Pfaden HKLM\CLSID, HKCR\CLSID in einer 64-Bit-Maschine registriert, sondern den Eintrag in die Pfade HKLM\Wow6432Node\CLSID und HKCR\Wow6432Node\CLSID platziert.

  6. Nun ist der Konflikt ein 64-Bit-Prozess, der versucht, einen 32-Bit-Prozess in einer 64-Bit-Maschine aufzurufen, der nach dem Registrierungseintrag in HKLM\CLSID, HKCR\CLSID sucht. Die Lösung ist, dass wir den 64-Bit-Prozess erzwingen müssen, um den Registrierungseintrag HKLM\Wow6432Node\CLSID und HKCR\Wow6432Node\CLSID anzusehen.

  7. Dies kann erreicht werden, indem die wcf-Serviceprojekt-Eigenschaften so konfiguriert werden, dass sie auf 'X86'-Computer anstelle von' Any 'abzielen.

  8. Nachdem die 'X86'-Version auf dem 2008 R2-Server bereitgestellt wurde, wurde das Problem "System.BadImageFormatException: Datei oder Assembly konnte nicht geladen" angezeigt.

  9. Lösung Bei dieser badimageformatexception werden die Eigenschaften von 'Enable32bitApplications' in IIS Apppool-Eigenschaften für den richtigen Apppool auf 'True' gesetzt.

24
Waheed

Das Problem ist, dass die DLL in der 32-Bit-Version der Windows-Registrierung registriert ist und die Anwendung die 64-Bit-Version verwendet.

Lösung: Gehen Sie in die Registerkarte Projekteigenschaften, Registerkarte Übersetzen und klicken Sie auf "Erweiterte Kompilierungsoptionen ...". Ändern Sie "Ziel-CPU" in x86, klicken Sie auf OK, speichern Sie und versuchen Sie es erneut.

Quelle: http://www.theogray.com/blog/2009/10/comexception-regdbeclassnotreg-on-64-bit-windows

Hat bei mir mit einem VB 6 COM DLL gearbeitet, der von einer .Net 4-Winforms-Anwendung aufgerufen wurde

5
Mariano Quevedo

Irgendwo in dem Code, den Sie verwenden, wird die Win32-API CoCreateInstance aufgerufen, um ein DLL dynamisch zu laden und ein Objekt daraus zu instanziieren.

Die Zuordnung zwischen der Komponenten-ID und der DLL, die dieses Objekt instanziieren kann, befindet sich normalerweise in HEKY_CLASSES_ROOT\CLSID in der Registrierung. Dies weiter zu diskutieren, würde bedeuten, viel über COM in Windows zu erklären. Der Fehler weist jedoch darauf hin, dass die COM-GUID nicht in der Registrierung vorhanden ist.

Ich weiß nicht viel darüber, was das PackAndGo DLL ist (eine Autodesk-Komponente), aber ich vermute, Sie müssen einfach diese Komponente oder das Softwarepaket "installieren", mit dem es über das angegebene Installationsprogramm geliefert wurde, um dieses _ zu erhalten.DLL und entsprechende COM-Registrierungsschlüssel auf Ihrem Computer, auf dem Sie Ihren Code ausführen möchten. (d. h. führen Sie setup.exe für dieses Produkt aus).

Mit anderen Worten, ich denke, Sie müssen "Pack and Go" auf diesem Computer installieren, anstatt nur die DLL auf den Zielcomputer zu kopieren.

Stellen Sie außerdem sicher, dass Sie Ihren Code als 32-Bit- oder 64-Bit-Code erstellen, je nachdem, welche Build-Variante (32 oder 64 Bit) von Pack And Go Sie installieren.

4
selbie

In 64-Bit-Windows-Maschinen müssen sich die COM-Komponenten in HKEY_CLASSES_ROOT\CLSID (64-Bit-Komponente) OR HKEY_CLASSES_ROOT\Wow6432Node\CLSID (32-Bit-Komponente) registrieren. Wenn Ihre Anwendung eine 32-Bit-Anwendung ist, die auf einem 64-Bit-Computer ausgeführt wird, sucht die COM-Bibliothek normalerweise nach dem GUID unter dem Knoten Wow64. Wenn Ihre Anwendung eine 64-Bit-Anwendung ist, versucht die COM-Bibliothek, über HKEY_CLASSES_ROOT zu laden. CLSID. Stellen Sie sicher, dass Sie die richtige Plattform als Ziel haben, und stellen Sie sicher, dass Sie die richtige Version der Bibliothek (32/64 Bit) installiert haben.

1
Rajesh

Lange gelöst Ich bin mir sicher, aber das könnte einer anderen armen Seele helfen.

Dieser Fehler kann auftreten, wenn die im Installationspaket bereitgestellte DLL nicht mit der DLL identisch ist, auf die Sie verweisen (diese haben unterschiedliche IDs).

Klingt offensichtlich, kann jedoch leicht passieren, wenn Sie eine kleine Änderung an der DLL vornehmen und die App zuvor auf Ihrem eigenen Computer installiert haben, der die DLL neu registriert. 

1
apc

Ich hatte das gleiche problem Ich habe viele Möglichkeiten ausprobiert, aber schließlich war die Lösung einfach. Lösung: Öffnen Sie IIS. Klicken Sie in den Anwendungspools mit der rechten Maustaste auf das verwendete .net-Framework. Gehen Sie zu den Einstellungen und ändern Sie "32-Bit-Anwendungen aktivieren" in "Wahr".

0
Sunil Xtha

Ich habe in meiner 32-Bit-Anwendung den untenstehenden Fehler erhalten. 

Fehler: Abrufen der COM-Klassenfactory für die Komponente mit CLSID {4911BB26-11EE-4182-B66C-64DF2FA6502D} ist aufgrund der folgenden .__ fehlgeschlagen. Fehler: 80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Und bei der Einstellung von "Enable32bitApplications" in defaultapplicationpool in IIS auf "true" für mich gearbeitet.

0
Deeku

Ich hatte dieses Problem und löste es, als mir klar wurde, dass es nach der in den Klammern angegebenen Windows-Registrierung suchte.

Da der Fehler nur auf einem Computer auftrat, musste ich die Registrierung von dem funktionierenden Computer exportieren und auf dem Computer installieren, auf dem er fehlte.

0
André Santaló

Ich war auf dasselbe Problem gestoßen. Ich habe einen Verweis auf die DLL der Microsoft.Office.Interop.Excel COM-Komponente hinzugefügt, aber Office wurde nicht auf meinem System installiert. Es wird kein Fehler bei der Kompilierung angezeigt. Ich habe meine Anwendung auf ein anderes System verschoben und ausgeführt. Es hat erfolgreich funktioniert.

Also, ich kann in meinem Fall sagen, dass es die Systemumgebung war, die dieses Problem verursacht hat.

0
Ankur Bhutani