Es gibt zwei Fragen: 1. Haben Sie die COM-Komponente auf dem Windows 7 x64-Computer installiert / registriert? 2.Was ist die Zielplattform Ihrer Anwendung? Ich denke, Sie sollten die Plattform auf x86 einstellen. Stellen Sie sie bitte nicht als "Beliebige CPU" ein. Bitte registrieren Sie zuerst die COM und führen Sie sie dann aus, um die Anwendung zu testen. Weitere Informationen finden Sie im Dokument: support.microsoft.com/kb/146219 und Erläuterungen zur Verwendung und zu Fehlermeldungen von Regsvr32
Es sieht so aus, als ob das Programm oder der Prozess, den Sie initialisieren möchten, entweder nicht auf Ihrem Computer installiert ist, eine beschädigte Installation aufweist oder registriert werden muss.
Entweder installieren, reparieren (über Software) oder registrieren (über Regsvr32.exe).
Sie haben uns nicht genügend Informationen zur Verfügung gestellt, um Ihnen weiter zu helfen.
Denken Sie, Sie meinten RegSvr32.exe (im Gegensatz zu RegSrv32.exe).
WindowsGM
60
Sie müssen sicherstellen, dass alle Ihre Assemblys für die richtige Architektur kompiliert werden. Versuchen Sie, die Architektur für x86 zu ändern, wenn die Neuinstallation der COM-Komponente nicht funktioniert.
Dies löste meinen Prozess, bei dem der NAV 2009 R2-Client nicht gefunden wurde (ClassID 50000004-0000-1000-0001-0000836BD2D2).
Vincent Vancalbergh
14
Mein Problem und die Lösung
Ich habe eine 32-Bit-DLL eines Drittanbieters, die ich auf einer 2008 R2-Maschine installiert habe, die 64-Bit ist.
Ich habe einen wcf-Dienst im .net 4.5-Framework erstellt, der die 32-Bit-Drittanbieter-DLL für den Prozess aufruft. Jetzt habe ich eine Eigenschaft erstellt, die auf "jede" CPU abzielt, und sie auf dem 64-Bit-Computer bereitgestellt.
Als ich versuchte, den wcf-Dienst aufzurufen, wurde der Fehler "80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG") angezeigt.
Jetzt habe ich ProcMon.exe verwendet, um das com-Registrierungsproblem zu verfolgen, und festgestellt, dass der Prozess nach dem Registrierungseintrag unter HKLM \ CLSID und HKCR \ CLSID sucht, wo es keinen Eintrag gibt.
Es wurde festgestellt, dass Microsoft die 32-Bit-COM-Komponenten nicht in den Pfaden HKLM \ CLSID, HKCR \ CLSID auf einem 64-Bit-Computer registriert, sondern den Eintrag in den Pfaden HKLM \ Wow6432Node \ CLSID und HKCR \ Wow6432Node \ CLSID platziert.
Jetzt ist der Konflikt ein 64-Bit-Prozess, der versucht, einen 32-Bit-Prozess auf einem 64-Bit-Computer aufzurufen, der nach dem Registrierungseintrag in HKLM \ CLSID, HKCR \ CLSID sucht. Die Lösung besteht darin, den 64-Bit-Prozess zu zwingen, den Registrierungseintrag unter HKLM \ Wow6432Node \ CLSID und HKCR \ Wow6432Node \ CLSID zu überprüfen.
Dies kann erreicht werden, indem die Eigenschaften des wcf-Serviceprojekts so konfiguriert werden, dass sie auf 'X86'-Computer anstatt auf' Beliebig 'abzielen.
Nach der Bereitstellung der 'X86'-Version auf dem 2008 R2-Server wurde das Problem "System.BadImageFormatException: Datei oder Assembly konnte nicht geladen werden" angezeigt.
Die Lösung für diese badimageformatexception besteht darin, die 'Enable32bitApplications' in den IIS Apppool-Eigenschaften für den richtigen Apppool auf 'True' zu setzen.
Bitte posten Sie keine identischen Antworten auf mehrere Fragen. Schreiben Sie eine gute Antwort und stimmen Sie ab, um die anderen Fragen als Duplikate zu schließen. Wenn die Frage kein Duplikat ist, passen Sie Ihre Antworten auf die Frage an .
Kleopatra
10
Beachten Sie auch, dass der Klassenkontext beim Initialisieren diese Ausnahme erstellen kann. Wenn Sie ein Objekt haben, das als INPROC_SERVER codiert ist, aber versuchen, CoCreateInstance als CLSCTX_LOCAL_SERVER zu verwenden, wird dieser Fehler ebenfalls angezeigt.
Sie müssen sicherstellen, dass das Objekt registriert ist und CoCreateInstance eine Instanz mit dem richtigen Klassenkontext erstellt.
Ja, wenn Sie zum Beispiel versuchen, DesktopWallpapermit CLSCTX_INPROC(anstelle von CLSCTX_ALL) zu erstellen , erhalten Sie den 0x80040154 (REGDB_E_CLASSNOTREG)Fehler.
user362515
9
Wenn Sie 64-Bit-COM-Komponenten in einer Webanwendung unter IIS verwenden, stellen Sie sicher, dass im Anwendungspool keine 32-Bit-Anwendungen zulässig sind ( 32-Bit-Anwendungen aktivieren: in erweiterten Einstellungen false ).
Ich habe es zum Laufen gebracht, indem ich 32-Bit-Anwendungen in den erweiterten Einstellungen des Anwendungspools aktiviert habe. Klicken Sie mit der rechten Maustaste auf den Anwendungspool und wählen Sie erweiterte Einstellungen - aktivieren Sie 32-Bit-Anwendungen. Dies kann jemandem da draußen helfen.
Auch für mich. Eine 32-Bit-DLL, die auf einem 64-Bit-Entwicklungscomputer, einem 64-Bit-Test und einem 64-Bit-Live-Server verwendet wird. Funktionierte gut auf der Entwicklungsbox. Bei der Bereitstellung auf den Test- und Live-Servern schlug dies fehl, bis 32-Bit-Apps in den jeweiligen IIS-App-Pools zugelassen und die Pools neu gestartet wurden. Ich musste auch "Interop-Typen einbetten" deaktivieren (eine Einstellung für die fehlerhafte DLL in VS) und "Lokal kopieren" = true setzen, um sicherzustellen, dass die DLL tatsächlich in ihrer ursprünglichen Form auf die Server kopiert wurde.
Cymorg
3
Durch Registrieren der Klasse (insbesondere ihrer CLSID) - siehe zB hier .
Die Art und Weise, wie ich dieses Problem gelöst habe, war die Registrierung der COMVia regsvr32.
Stellen Sie sicher, dass die von Ihnen aufgerufene COM registriert ist.
Meine Anwendung wurde verwendet xceedcry.dllund ich habe sie nicht registriert. Nachdem ich es registriert hatte, funktionierte die Anwendung einwandfrei.
In meinem Fall wurde die Klasse ordnungsgemäß registriert und in JEDEM CPU / 64-Bit- Modus erstellt.
Die Eigenschaft 32-Bit-Anwendungen aktivieren des IIS-Anwendungspools der Anwendung, die die Klasse verwendet, wurde jedoch auf True festgelegt .
Die Klasse wurde aufgrund der Nichtübereinstimmung der Architektur zwischen der Anwendungspoolkonfiguration und der tatsächlich registrierten Klasse nicht gefunden.
Durch Festlegen von " 32-Bit-Anwendungen aktivieren" auf " Falsch" wurde das Problem behoben.
Ich hatte das gleiche Problem mit MapWinGis. Ich habe die Lösung gefunden, indem ich an Visual Studios 2015 Windows Forms Proyect gearbeitet habe. Klicken Sie einfach mit der rechten Maustaste auf Proyect-> Eigenschaften-> Erstellen, setzen Sie die Konfiguration auf Alle Konfigurationen und setzen Sie sie in der Conbobox "Plattformziel" auf x64.
Ich bin auf dieses Problem gestoßen, als ich eine .NET-Assembly von einem C ++ - Client über COM aufgerufen habe. Es stellt sich heraus, dass eine der Assemblys, von denen die .Net-Assembly abhängig war, nicht gefunden werden konnte. Ich rang eine Weile und versuchte herauszufinden, was mit der 1. Versammlung nicht stimmte, aber es war tatsächlich eine der Abhängigkeiten der 1. Versammlung. Beim Aufrufen von CoCreateInstance () vom C ++ - Client sind zwei verschiedene Fehler aufgetreten. Der erste war:
REGDB_E_CLASSNOTREG Klasse nicht registriert
. Der zweite Versuch war:
0x80131040: Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein.
Überprüfen Sie daher, ob die Referenzen Ihrer Baugruppe vorhanden sind. Ich entdeckte dies, indem ich die erste Assembly mit dotPeek durchsuchte und bemerkte, dass eine der Referenzen fehlte. Durch Platzieren der richtigen Version der Abhängigkeit in dem Ordner wurden beide Fehler behoben.
Ich habe meine Anwendung für jede CPU kompiliert und das Hauptproblem stellte sich heraus, dass der Adobe Reader älter installiert wurde. 10.x muss v11.x aktualisieren. Auf diese Weise kann ich dieses Problem beheben.
Ich bin auf dasselbe Problem mit einer COM-Klasse gestoßen, dh "Klasse nicht registrierte Ausnahme" zur Laufzeit. Für mich war ich in der Lage, eine Lösung zu finden, indem ich in die Datei app.config ging und die Elemente 'startup' und 'SupportedRuntime' in Folgendes änderte:
Ich habe das gleiche Problem konfrontiert. Nachdem ich einige Nachforschungen angestellt hatte, fand ich eine Lösung für mich und es kann nützlich sein. Das Problem hängt nach meiner Beobachtung nicht nur mit der Neuinstallation zusammen, sondern auch von den Zugriffsberechtigungen.
Schritt 1: Reparieren Sie das jeweilige COM-Objekt.
Schritt 2: Komponentendienste> Computer> Arbeitsplatz> DCOM-Konfiguration> Wählen Sie Ihr COM-Objekt aus> Rechtsklick> Eigenschaften> Registerkarte Sicherheit> Zugriffsberechtigungen> Wählen Sie Anpassen> Klicken Sie auf BEARBEITEN> Wählen Sie IIS_USER (falls nicht vorhanden, erstellen Sie mit vollständigen Rechten) und geben Sie vollständig an Zugriff und klicken Sie auf OK.
Zur Registerkarte Identität wechseln> Sie können "Interaktiver Benutzer" oder "Dieser Benutzer" auswählen> Klicken Sie auf Übernehmen und auf OK. Wenn Sie "Dieser Benutzer" auswählen, müssen wir diesem Server Administratorrechte gewähren
Schritt 3: Öffnen Sie IIS Manager> Starten Sie die Anwendungspools neu.
Antworten:
Es sieht so aus, als ob das Programm oder der Prozess, den Sie initialisieren möchten, entweder nicht auf Ihrem Computer installiert ist, eine beschädigte Installation aufweist oder registriert werden muss.
Entweder installieren, reparieren (über Software) oder registrieren (über Regsvr32.exe).
Sie haben uns nicht genügend Informationen zur Verfügung gestellt, um Ihnen weiter zu helfen.
quelle
Sie müssen sicherstellen, dass alle Ihre Assemblys für die richtige Architektur kompiliert werden. Versuchen Sie, die Architektur für x86 zu ändern, wenn die Neuinstallation der COM-Komponente nicht funktioniert.
quelle
Mein Problem und die Lösung
Ich habe eine 32-Bit-DLL eines Drittanbieters, die ich auf einer 2008 R2-Maschine installiert habe, die 64-Bit ist.
Ich habe einen wcf-Dienst im .net 4.5-Framework erstellt, der die 32-Bit-Drittanbieter-DLL für den Prozess aufruft. Jetzt habe ich eine Eigenschaft erstellt, die auf "jede" CPU abzielt, und sie auf dem 64-Bit-Computer bereitgestellt.
Als ich versuchte, den wcf-Dienst aufzurufen, wurde der Fehler "80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG") angezeigt.
Jetzt habe ich ProcMon.exe verwendet, um das com-Registrierungsproblem zu verfolgen, und festgestellt, dass der Prozess nach dem Registrierungseintrag unter HKLM \ CLSID und HKCR \ CLSID sucht, wo es keinen Eintrag gibt.
Es wurde festgestellt, dass Microsoft die 32-Bit-COM-Komponenten nicht in den Pfaden HKLM \ CLSID, HKCR \ CLSID auf einem 64-Bit-Computer registriert, sondern den Eintrag in den Pfaden HKLM \ Wow6432Node \ CLSID und HKCR \ Wow6432Node \ CLSID platziert.
Jetzt ist der Konflikt ein 64-Bit-Prozess, der versucht, einen 32-Bit-Prozess auf einem 64-Bit-Computer aufzurufen, der nach dem Registrierungseintrag in HKLM \ CLSID, HKCR \ CLSID sucht. Die Lösung besteht darin, den 64-Bit-Prozess zu zwingen, den Registrierungseintrag unter HKLM \ Wow6432Node \ CLSID und HKCR \ Wow6432Node \ CLSID zu überprüfen.
Dies kann erreicht werden, indem die Eigenschaften des wcf-Serviceprojekts so konfiguriert werden, dass sie auf 'X86'-Computer anstatt auf' Beliebig 'abzielen.
Nach der Bereitstellung der 'X86'-Version auf dem 2008 R2-Server wurde das Problem "System.BadImageFormatException: Datei oder Assembly konnte nicht geladen werden" angezeigt.
Die Lösung für diese badimageformatexception besteht darin, die 'Enable32bitApplications' in den IIS Apppool-Eigenschaften für den richtigen Apppool auf 'True' zu setzen.
quelle
Beachten Sie auch, dass der Klassenkontext beim Initialisieren diese Ausnahme erstellen kann. Wenn Sie ein Objekt haben, das als INPROC_SERVER codiert ist, aber versuchen, CoCreateInstance als CLSCTX_LOCAL_SERVER zu verwenden, wird dieser Fehler ebenfalls angezeigt.
Sie müssen sicherstellen, dass das Objekt registriert ist und CoCreateInstance eine Instanz mit dem richtigen Klassenkontext erstellt.
quelle
DesktopWallpaper
mitCLSCTX_INPROC
(anstelle vonCLSCTX_ALL
) zu erstellen , erhalten Sie den0x80040154 (REGDB_E_CLASSNOTREG)
Fehler.Wenn Sie 64-Bit-COM-Komponenten in einer Webanwendung unter IIS verwenden, stellen Sie sicher, dass im Anwendungspool keine 32-Bit-Anwendungen zulässig sind ( 32-Bit-Anwendungen aktivieren: in erweiterten Einstellungen false ).
quelle
Ich habe es zum Laufen gebracht, indem ich 32-Bit-Anwendungen in den erweiterten Einstellungen des Anwendungspools aktiviert habe. Klicken Sie mit der rechten Maustaste auf den Anwendungspool und wählen Sie erweiterte Einstellungen - aktivieren Sie 32-Bit-Anwendungen. Dies kann jemandem da draußen helfen.
quelle
Durch Registrieren der Klasse (insbesondere ihrer CLSID) - siehe zB hier .
quelle
in meinem Fall
my platform
ist x64the Dll library(sdk)
und dasredistributable package
ist x64so
im Lösungs-Explorer
navigate to your project
öffnen
Properties
change the Platform target from AnyCPU to x64
quelle
Die Art und Weise, wie ich dieses Problem gelöst habe, war die Registrierung der
COM
Viaregsvr32
.Stellen Sie sicher, dass die von Ihnen aufgerufene COM registriert ist.
Meine Anwendung wurde verwendet
xceedcry.dll
und ich habe sie nicht registriert. Nachdem ich es registriert hatte, funktionierte die Anwendung einwandfrei.quelle
Meine Lösung bestand darin, " 32-Bit-Anwendungen aktivieren " in den erweiterten Einstellungen des relativen App-Pools in IIS in "True " zu ändern .
quelle
In meinem Fall wurde die Klasse ordnungsgemäß registriert und in JEDEM CPU / 64-Bit- Modus erstellt.
Die Eigenschaft 32-Bit-Anwendungen aktivieren des IIS-Anwendungspools der Anwendung, die die Klasse verwendet, wurde jedoch auf True festgelegt .
Die Klasse wurde aufgrund der Nichtübereinstimmung der Architektur zwischen der Anwendungspoolkonfiguration und der tatsächlich registrierten Klasse nicht gefunden.
Durch Festlegen von " 32-Bit-Anwendungen aktivieren" auf " Falsch" wurde das Problem behoben.
quelle
Für mich musste ich eine 64-Bit-Build-Konfiguration erstellen.
quelle
Ich hatte das gleiche Problem mit MapWinGis. Ich habe die Lösung gefunden, indem ich an Visual Studios 2015 Windows Forms Proyect gearbeitet habe. Klicken Sie einfach mit der rechten Maustaste auf Proyect-> Eigenschaften-> Erstellen, setzen Sie die Konfiguration auf Alle Konfigurationen und setzen Sie sie in der Conbobox "Plattformziel" auf x64.
quelle
Ich bin auf dieses Problem gestoßen, als ich eine .NET-Assembly von einem C ++ - Client über COM aufgerufen habe. Es stellt sich heraus, dass eine der Assemblys, von denen die .Net-Assembly abhängig war, nicht gefunden werden konnte. Ich rang eine Weile und versuchte herauszufinden, was mit der 1. Versammlung nicht stimmte, aber es war tatsächlich eine der Abhängigkeiten der 1. Versammlung. Beim Aufrufen von CoCreateInstance () vom C ++ - Client sind zwei verschiedene Fehler aufgetreten. Der erste war: REGDB_E_CLASSNOTREG Klasse nicht registriert . Der zweite Versuch war: 0x80131040: Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein.
Überprüfen Sie daher, ob die Referenzen Ihrer Baugruppe vorhanden sind. Ich entdeckte dies, indem ich die erste Assembly mit dotPeek durchsuchte und bemerkte, dass eine der Referenzen fehlte. Durch Platzieren der richtigen Version der Abhängigkeit in dem Ordner wurden beide Fehler behoben.
quelle
Ich habe meine Anwendung für jede CPU kompiliert und das Hauptproblem stellte sich heraus, dass der Adobe Reader älter installiert wurde. 10.x muss v11.x aktualisieren. Auf diese Weise kann ich dieses Problem beheben.
quelle
Ich bin auf dasselbe Problem mit einer COM-Klasse gestoßen, dh "Klasse nicht registrierte Ausnahme" zur Laufzeit. Für mich war ich in der Lage, eine Lösung zu finden, indem ich in die Datei app.config ging und die Elemente 'startup' und 'SupportedRuntime' in Folgendes änderte:
Weitere Informationen finden Sie hier http://stackoverflow.com/questions/1604663/
und hier https://msdn.microsoft.com/en-us/library/w4atty68(v=vs.110).aspx
Ich sollte beachten, dass ich Visual Studio 2017 ausführe. Ziel-CPU = x86 Interop-Typ einbetten = true (im Eigenschaftenfenster)
quelle
Gehen Sie in das Verzeichnis des .Net-Frameworks und registrieren Sie die entsprechende DLL im Regsvr32.exe- Leerraum-DLL-Pfad.
quelle
Ich habe das gleiche Problem konfrontiert. Nachdem ich einige Nachforschungen angestellt hatte, fand ich eine Lösung für mich und es kann nützlich sein. Das Problem hängt nach meiner Beobachtung nicht nur mit der Neuinstallation zusammen, sondern auch von den Zugriffsberechtigungen.
Schritt 1: Reparieren Sie das jeweilige COM-Objekt.
Schritt 2: Komponentendienste> Computer> Arbeitsplatz> DCOM-Konfiguration> Wählen Sie Ihr COM-Objekt aus> Rechtsklick> Eigenschaften> Registerkarte Sicherheit> Zugriffsberechtigungen> Wählen Sie Anpassen> Klicken Sie auf BEARBEITEN> Wählen Sie IIS_USER (falls nicht vorhanden, erstellen Sie mit vollständigen Rechten) und geben Sie vollständig an Zugriff und klicken Sie auf OK.
Zur Registerkarte Identität wechseln> Sie können "Interaktiver Benutzer" oder "Dieser Benutzer" auswählen> Klicken Sie auf Übernehmen und auf OK. Wenn Sie "Dieser Benutzer" auswählen, müssen wir diesem Server Administratorrechte gewähren
Schritt 3: Öffnen Sie IIS Manager> Starten Sie die Anwendungspools neu.
Hinweis: Starten Sie den Server bei Bedarf neu
quelle
Hier finden Sie die Lösung, führen Sie das Tool mmc -32 aus (nicht dcomcfg).
Versuchen Sie auf einem 64-Bit-System mit 32-Bit-Office Folgendes:
quelle