Ich versuche, COM dazu zu bringen, meinen ausgehenden COM-Server zu starten. Es funktioniert, wenn der Serverprozess mit x64 kompiliert wird, aber wenn ich AnyCPU verwende (was ich will), dann hängt es für eine Weile und scheitert schließlich mit 0x80080005 (CO_E_SERVER_EXEC_FAILURE). Wie kann ich das zum Laufen bringen?
Ein anderer Junge hatte ein ähnliches Problem : a>, aber die MSFT-Antwort ist verwirrend. Er scheint vorzuschlagen, dass es nur über DCOM (siehe Link) oder COM + funktionieren kann. Ich vermute, dass entweder sehr viel Arbeit und wesentlich schlechter als die Verteilung meiner .exe, die als x64 und x86 gebaut wird, sein wird.
Sie fragen sich vielleicht, warum ich IPersistFile implementiere. Das liegt daran, dass mein Problem darin besteht, BindMoniker () von einem 32-Bit-C ++ - Programm zu meinem AnyCPU .NET-Programm zu bringen. Ich habe mein Problem auf das einfachere Beispiel reduziert, das hier vorgestellt wird.
Hier ist der Client-Code:
%Vor%und hier ist der Server:
%Vor%Versuchen Sie, die Registrierungsdienste -Klasse zu verwenden, um Ihre com-Assembly zu registrieren . Es wird auch die richtigen Registry-Pfade auswählen und einige andere Dinge tun.
Beispiel:
%Vor%Ich denke auch, dass .NET-Client-Assemblies einige Probleme mit .NET-Servern haben, aber ich finde keine Ressource dafür ...
Hoffe, es wird helfen ...
Ich schätze, das Problem liegt in der Laufzeit. Ich habe einen COM-Server erstellt, der sich mit einer C ++ - Bibliothek registriert (Registrierung wird fehlerfrei durchgeführt). Ich habe Probleme beim Wechseln zu AnyCPU von .NET (CS).
Die Architektur:
Hässliche Dinge passieren beim Registrieren der .NET-Anwendung, die als "AnyCPU" erstellt wurde. Sobald der COM-Client den COM-Server über DCOM aufruft, wird die Serveranwendung gestartet, aber der Client erhält den Fehler, dass der COM-Server nicht gestartet werden konnte.
Ich ging ein paar Schritte weiter, analysierte Registrierungsdaten mit Procmon und anderen Tools und kam zu dem gleichen Ergebnis:
Nun habe ich noch ein paar Experimente gemacht: Der x86 / x64 / AnyCPU COM Client kann sich ohne Probleme mit irgendeinem x86 / x64 COM Server verbinden, aber er kann sich sowieso nicht mit einem AnyCPU COM Server verbinden ...
Ich habe dann die folgenden Testfälle durchgeführt:
Wo zur Hölle ist das Kommunikationsproblem? Das ist sehr merkwürdig ... Keine der vorgestellten Lösungen (CLSCTX_ACTIVATE_64_BIT_SERVER, PreferredServerBitness oder corflags) hat geholfen.
Hat jemand anderes in dieser Angelegenheit Fortschritte gemacht? Sollten wir uns mit Microsoft in Verbindung setzen?