Ich habe einen Windows-Dienst mit C # .NET entwickelt, um einen PDF-Bericht zu erstellen. Zum Generieren einer PDF-Datei verwende ich eine DLL eines Drittanbieters. Die Anwendung wird auf meiner Windows XP-Plattform ausgeführt. Bei der Bereitstellung des Dienstes in der 64-Bit-Version von Windows Server 2008 wurde folgende Fehlermeldung angezeigt:
Das Abrufen der COM-Klassenfactory für Komponenten mit der CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} ist aufgrund des folgenden Fehlers fehlgeschlagen: 80040154.
Ich habe die DLL mit dem Befehl regsvr32 registriert. Ich kann diese CLSID in der Registrierung sehen. Das Problem besteht jedoch weiterhin.
Was könnte das Problem sein?
Antworten:
In VS - Projekteigenschaften - auf der Registerkarte Erstellen - Plattformziel = X86
quelle
Ich bin auf ein sehr ähnliches Problem gestoßen.
Ich musste eine alte 32-Bit-DLL in einer Webanwendung verwenden, die auf einem 64-Bit-Computer entwickelt wurde. Ich habe die 32-Bit-DLL mit der Version von regsrv32 in diesem Ordner im Ordner windows \ sysWOW64 registriert.
Aufrufe der DLL eines Drittanbieters wurden anhand von Komponententests in Visual Studio ausgeführt, schlugen jedoch in der Webanwendung fehl, die in IIS auf demselben Computer mit dem Fehler 80040154 gehostet wurde.
Durch Ändern des Anwendungspools in "32-Bit-Anwendungen aktivieren" wurde das Problem behoben.
quelle
Es hört sich so an, als ob Ihr Dienst gegen "Beliebige CPU" erstellt wurde, was zu Fehlern bei 64-Bit führt, wenn Sie COM-Komponenten verwenden. Sie müssen es für bauen
x86
.Die Website wird wahrscheinlich als 32-Bit-Prozess ausgeführt, weshalb sie die Komponente verwenden kann. Wenn Sie Ihre Lösung gegen
x86
erstellen, wird Ihr Dienst als 32-Bit ausgeführt.quelle
.ocx file (c:\Windows\SysWow>RegSvr32 genX.ocx)
, erhalte aber einen Fehler. Das Modul konnte nicht geladen werden. Stellen Sie sicher, dass die Binärdatei im angegebenen Pfad gespeichert ist, oder debuggen Sie sie, um nach Problemen mit der Binärdatei oder abhängigen DLL-Dateien zu suchen.Sie müssen Ihr Plattformziel für Projekteigenschaften X86 nicht konfigurieren. Sie können die iis-Optionen auch so konfigurieren, dass sie mit x86 funktionieren
quelle
Wenn Sie nach einer Möglichkeit suchen, dies zu erreichen, ohne Ihre Any CPU-Anwendung neu zu kompilieren, ist hier eine weitere mögliche Problemumgehung:
Ich nehme keine Anerkennung für die Lösung, aber es hat bei uns funktioniert. Überprüfen Sie den Quelllink für weitere Informationen und andere Kommentare.
Quelle: https://techtalk.gfi.com/32bit-object-64bit-environment/
quelle
Das Problem ist, dass der Serverprozess 64-Bit und die Bibliothek 32-Bit ist und versucht, die COM-Komponente im selben Prozess (In-Proc-Server) zu erstellen. Entweder kompilieren Sie den Server neu und machen ihn 32-Bit, oder Sie lassen den Server unverändert und machen die COM-Komponente außer Betrieb. Der einfachste Weg, einen COM-Server außer Betrieb zu setzen, besteht darin, eine COM + -Anwendung zu erstellen - Systemsteuerung -> Verwaltung -> ComponentServices.
quelle
An error occurred while processing the last operation. [Error code 00690075] The event log may contain additional troubleshooting information.
Ich habe keine Kompilierungseinstellungen geändert.
Setzen Sie einfach "32-Bit-Anwendung aktivieren = True" in den erweiterten AppPool-Einstellungen.
Es hat bei mir funktioniert
quelle
Die Lösung für Windows 2008 Server x64 lautet:
Dieses Verfahren ist gültig, es ist in Ordnung.
quelle
Ich hatte das gleiche Problem, aber die anderen Antworten lieferten nur einen Teil der Lösung.
Die Lösung ist zweifach:
Entfernen Sie das 64-Bit aus dem Register.
oder
Registrieren Sie es als 32bit:
C:\Windows\SysWOW64\regsvr32 <file.dll>
Das Registrieren als 32-Bit-Registrierung ohne Entfernen der 64-Bit-Registrierung behebt mein Problem nicht.
quelle
Hatte ein verwandtes Problem mit einem anderen, aber ähnlichen Fix:
Ich hatte ein Windows-Dienstprojekt mit einer 64-Bit-DLL auf "Any-CPU" eingestellt. Gleiche Fehlermeldung. Versuchte eine ganze Reihe von Dingen, aber nichts funktionierte. Schließlich ging ich zu Projekteigenschaften -> Erstellen und stellte fest, dass für das Projekt "32-Bit bevorzugen" aktiviert war. Deaktiviert dies und kein Fehler mehr.
Ich vermute, dass der Windows-Dienst eine 32-Bit-DLL erwartet hat und diese nicht finden konnte.
quelle
So wechseln Sie zu x86:
quelle
Wenn Sie eine Website betreiben, können Sie auch versuchen, Ihren Anwendungspool so einzustellen, dass 32-Bit-Anwendungen deaktiviert werden (unter den erweiterten Einstellungen eines Pools).
quelle
In meinem persönlichen Fall wurde das Problem bei der Suche nach der Klassen-ID in der Windows-Registrierung auf dem Entwicklercomputer behoben (da das Problem auf einem Client-PC ausgelöst wurde). Diese Aktion wird in die COM-Komponente eingefügt , die das Problem verursacht: eine x86-Bibliothek, auf die in meinem .NET-Projekt verwiesen wird und die nicht als OCX / COM für das Installationsprogramm oder die Updater-Anwendung registriert wurde.
Grüße
quelle
Für jeden, der VSTO verwendet, war das Problem für mich ein fehlender Verweis auf die
office
Baugruppe. Es wird auch angezeigt, wenn Sie versuchen, bestimmte VSTO-Objekte manuell zu instanziieren.quelle
Ich stellte fest, dass mein Problem mit der tatsächlichen Registrierung der DLL zusammenhängt.
Führen Sie zuerst "Regedit.exe" an einer CMD-Eingabeaufforderung aus (ich habe die Sicherheitsstufe auf "Administrator" erhöht, "nur für den Fall") und durchsuchen Sie dann die Registrierung (indem Sie im RegEdit-Menü auf "Bearbeiten / Suchen" klicken oder Strg + F drücken). für die CLSID, die in der Fehlermeldung angezeigt wird, die Sie bezüglich der COM-Klassenfactory erhalten haben. Meine CLSID war 29AB7A12-B531-450E-8F7A-EA94C2F3C05F. Wenn dieser Schlüssel gefunden wurde, wählen Sie den Unterschlüssel "InProcServer2" unter diesem Hive-Knoten aus und ermitteln Sie den Dateinamen der Problem-DLL im rechten Regedit-Frame. wird unter "Standard" angezeigt. Wenn sich diese Datei in "C: \ Windows \ SysWow64" befindet (z. B. C: \ Windows \ SysWow64 \ Redemption.dll "), ist es wichtig, dass Sie die Datei" C: \ Windows \ SysWow64 \ RegSvr32.exe "verwenden Registrieren Sie diese DLL über die Befehlszeile und NICHT die Standardeinstellung "C: C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll Drücken Sie die Eingabetaste. Schließen Sie das Befehlsfenster (über „Exit“ dann neu starten Sie den Computer (immer Neustart statt schließen dann starten, da (seltsam) Restart eine gründliche heruntergefahren und neu geladen werden alles ausführen , während „Shut Down“ und Power-Up ein nachlädt Gespeicherter Cache mit Treibern und anderen Werten (die möglicherweise fehlerhaft sind). Wenn Sie in Zukunft eine DLL registrieren, denken Sie daran, die SysWow64 "RegSvr32.exe" für alle im Ordner C: \ Windows \ SysWow64 gespeicherten DLLs und dieses Problem zu verwenden. c (wenn es durch falsche Registrierung verursacht wird) sollte nicht wieder vorkommen.
quelle
Mein Problem war, dass ich in meinen Projektreferenzen die falsche MS Sync FrameWork-Version (1.0) hatte. Nach dem Update auf Version 2.1 war der Fehler behoben und das Leben ist wieder gut.
quelle
In meinem Fall, ich MS Office - Datei wie Herstellung
word
oderexcel
, ich laufeWin+R
und ausführendcomcnfg
, in der DCOM - Konfiguration neben wählt OFFICE bezogenen Namen Punkt (wie Name enthältExcel
oderWord
oderOffice
) undOpen the properties, select Identity tab and select the interactive user.
wie diese Antwort ,Meine Fehlermeldung wird
CLSID {000209FF-0000-0000-C000-000000000046}
angezeigt, daher muss ich versuchen, diese bestimmte CLSID in DCOM Config zu finden, und sie wird beendet. Ich wähle sie aus und folge demselben Schritt, setze dieinteractive user
, dann funktioniert sie.quelle