Laden...

COM Interop

Letzter Beitrag vor 19 Jahren 6 Posts 1.862 Views
COM Interop

Hallo.

Ich habe eine Anwendung (Server) der auf einem Remote- PC läuft. Der Server darf nur einmal gestartet werden. Wenn der Server nicht läuft und ich starte meinen Client, dann wird der Server auf dem Remote PC gestartet und es läuft alles wie es soll.
Wenn ich nun meinen Client beende wird die Verbindung am Server getrennt, der Server bleibt gestartet. Soweit ist alles ok.
Wenn ich nun aber meine Client erneut starte, dann wird versucht auf dem Remote PC einen zweite instanz des Servers zu starten, da dies nicht erlaubt ist wird dieser prozess auf dem Server beendet und ich bekomme eine Fehlermeldung.
Nun meine Frage. Wie kann ich mich mit einem laufenden Prozess verbinden?
Ich habe schon mit Activator.GetObject probiert. Dies hat aber nich funktioniert. 😦

Mein Code:

C#-Code:
Type dcomType = Type.GetTypeFromCLSID(guid, ComputerName, false);
Object dcomObj = null;
dcomObj = Activator.CreateInstance(dcomType);

Habe schon herausgefunden, dass wenn der server auf singelton eingestellt ist, es funktionieren sollte. Nur kann ich am Server leider nichts ändern 😦
Mit Delphi funktioniert es auch so. Möchte es aber in .net machen

Gibt es sonst noch eine möglichkeit wie man dies mit c# machen kann?

Bin für jede hilfe dankbar.

Danke,

Hansen

Vielleicht hilft dir Marshal.GetActiveObject weiter. Im Doku-Link steht was davon, wie man per CLSID an eine laufende Instanz kommt, GetActiveObject erwartet eine ProgID:

Msdn: Marshal.GetActiveObject Method

Gruss
Pulpapex

Danke. Werde ich gleich einmal ausprobieren.
Wie bekomme ich allerdings die ProgID?

mfg.
Hansen

Hat jemand eine Ahnung wie ich die ProgID hier ermitteln kann?

Danke,

mfg.
Hansen

Ich kenn mich mit Marshalling etc. nicht wirklich aus, aber vielleicht hilft Dir

"Marshal.GenerateProgIdForType Method" weiter?

MSDN hierzu

Hoffe das liefert Dir das was Du benötigst?

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

Hallo.

Falls es jemanden interessiert, ich habe jetzt eine Lösung für das Problem. Diese Lösung ist vieleicht nicht die beste, aber sie funktioniert.
Ich Verwende jetzt einfach die API Funktion CoCreateInstanceEx. (DLLImport)