Klasse nicht registriert Fehler

9

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

  

Das Abrufen der COM-Klassenfactory 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 Visual Studio.

Wer weiß, was der Fehler ist?

    
Arun 01.08.2013, 05:10
quelle

6 Antworten

20

Mein Problem und die Lösung

  1. Ich habe eine 32-Bit-Third-Party-DLL, die ich in 2008 R2 Maschine installiert habe, die 64 Bit ist.

  2. Ich habe einen in .NET Framework 4.5 erstellten Dienst, der die 32-Bit-Third-Party-DLL für den Prozess aufruft. Jetzt habe ich Build-Eigenschaft gesetzt, um "Any" CPU Ziel und entfiel es auf der 64-Bit-Maschine.

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

  4. )
  5. Nun habe ich ProcMon.exe verwendet, um das Registry-Problem zu verfolgen, und festgestellt, dass der Prozess nach dem Registrierungseintrag bei HKLM \ CLSID und HKCR \ CLSID sucht, wo es keinen Eintrag gibt.

  6. Ich weiß, dass Microsoft die 32-Bit-com-Komponenten nicht auf den Pfaden HKLM \ CLSID, HKCR \ CLSID in 64-Bit-Maschinen registrieren wird, sondern den Eintrag in HKLM \ Wow6432Node \ CLSID und HKCR \ Wow6432Node \ CLSID Pfade.

  7. Jetzt ist der Konflikt ein 64-Bit-Prozess, der versucht, einen 32-Bit-Prozess in einer 64-Bit-Maschine aufzurufen, die nach dem Registrierungseintrag in HKLM \ CLSID, HKCR \ CLSID suchen wird. Die Lösung ist, dass wir den 64-Bit-Prozess zwingen müssen, den Registrierungseintrag unter HKLM \ Wow6432Node \ CLSID und HKCR \ Wow6432Node \ CLSID zu betrachten.

  8. Dies kann erreicht werden, indem die Eigenschaften des wcf-Dienstprojekts so konfiguriert werden, dass sie auf die 'X86' Maschine anstelle von 'Any' zielen.

  9. Nach der Bereitstellung der 'X86' Version auf dem Server 2008 R2 wurde das Problem "System.BadImageFormatException: Datei oder Assembly konnte nicht geladen werden"

  10. Lösung zu dieser badimageformatexception setzt die 'Enable32bitApplications' in den IIS Apppool-Eigenschaften für den richtigen Apppool auf 'True'.

Waheed 08.09.2015, 14:42
quelle
4

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 Projekteigenschaften, Registerkarte Kompilieren und klicken Sie auf "Erweiterte Kompilieroptionen ...". Ändern Sie "Ziel-CPU" auf x86, klicken Sie auf OK, speichern Sie und versuchen Sie es erneut.

Quelle: Ссылка

Hat für mich mit einer VB 6 COM DLL funktioniert, die von einer .Net 4 Winforms-Anwendung

aufgerufen wird     
Mariano Quevedo 27.01.2014 20:30
quelle
3

Irgendwo im Code, den Sie verwenden, gibt es einen Aufruf an die Win32-API, CoCreateInstance , um eine DLL dynamisch zu laden und ein Objekt daraus zu erzeugen.

Die Zuordnung zwischen der Komponenten-ID und der DLL, die dieses Objekt instanziieren kann, finden Sie normalerweise in der Registrierung in HEKY_CLASSES_ROOT \ CLSID. Um dies weiter zu diskutieren, wäre es eine Menge über COM zu erklären in Windows . Aber der Fehler zeigt an, dass die GUID COM nicht in der Registrierung vorhanden ist.

Ich weiß nicht viel darüber, was die PackAndGo-DLL ist (eine Autodesk-Komponente), aber ich vermute, dass Sie einfach diese Komponente oder das Softwarepaket, das mit dem angegebenen Installer geliefert wurde, installieren müssen, um diese DLL und die entsprechende COM zu haben Registrierungsschlüssel auf Ihrem Computer, auf dem Sie versuchen, Ihren Code auszuführen. (d. h. gehen Sie setup.exe für dieses Produkt).

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

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

    
selbie 01.08.2013 05:21
quelle
1

In 64-Bit-Windows-Maschinen müssen sich die COM-Komponenten in HKEY_CLASSES_ROOT \ CLSID (64-Bit-Komponente) ODER 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 der GUID unter Wow64-Knoten. Wenn Ihre Anwendung eine 64-Bit-Anwendung ist, versucht die COM-Bibliothek, HKEY_CLASSES_ROOT \ CLSID zu laden. Stellen Sie sicher, dass Sie auf die richtige Plattform ausgerichtet sind, und stellen Sie sicher, dass Sie die richtige Version der Bibliothek (32/64 Bit) installiert haben.

    
Rajesh 02.08.2013 21:37
quelle
0

Ich hatte dieses Problem und löste es, als ich verstand, dass es nach der Windows-Registrierung gesucht hat, die in den Klammern angegeben ist.

Da der Fehler nur auf einem Computer aufgetreten ist, musste ich die Registrierung von dem Computer, auf dem sie funktionierte, exportieren und auf dem Computer installieren, auf dem sie fehlte.

    
André Santaló 11.09.2014 18:04
quelle
0

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

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

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

    
apc 11.10.2017 15:03
quelle