Laden...

COM Interop

Erstellt von hansen vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.811 Views
H
hansen Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren
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

P
939 Beiträge seit 2003
vor 18 Jahren

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

H
hansen Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren

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

mfg.
Hansen

H
hansen Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren

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

Danke,

mfg.
Hansen

4.506 Beiträge seit 2004
vor 18 Jahren

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!”

H
hansen Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren

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)