Laden...

COM Interface für die eigene Application

Erstellt von VJones vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.396 Views
V
VJones Themenstarter:in
19 Beiträge seit 2006
vor 17 Jahren
COM Interface für die eigene Application

Hey @all,

da ja COM / DCOM in .NET als "Out" scheint, frage ich mich nun, wie ich eine geeignete Schnittstelle entwickeln kann, so dass andere Programme meines fernsteuern können.

Gibt es hierzu in C# bzw. .NET eine neue Möglichkeit oder "back to the roots" ?

Gruß Volker

3.728 Beiträge seit 2005
vor 17 Jahren
Fernsteuern

Ich gehe davon aus, dass Du mit fernsteuern wirklich das steuern eines laufenden Prozeßes (EXE-Datei) aus einem anderen Prozeß meinst.

Das geht sehr gut mit Remoting. Bei Remoting denkt jeder gleich an Netzwerkkommunikation. Seit dem .NET Framework 2.0 unterstützt Remoting aber auch Lokale-Interprozeßkommunikation über das Named Pipe-Protokoll. Technisch wird das durch den IpcChannel realisiert. Wir nutzen das in der Firma um verschiedene Prozesse unserer Anwendungen auf der selben Maschine miteinander reden zu lassen. Remoting ist einfach anzuwenden, sicher und schnell (da die Kommunikation innerhalb des Hauptspeichers stattfindet).

Die fernzusteuernde Anwendung (kann z.B. auch eine GUI-Anwendung sein) muss einfach bestimmte Objekte (diese Objekte bilden die Kommunikationsschittstelle nach draußen) über einen IpcChannel veröffentlichen. Für die einfache Nutzung aus den Anwendungen, die fernsteuern, ist es praktisch die IPC-Kommunikation in einer DLL zu kapseln. Diese DLL enthält Klassen, die die Schnittstellen der "Kommunikations-Objekte" implementieren und Aufrufe einfach über den IPC-Kanal an die fernzusteuernde Anwendung weiterleiten. Wenn COM-Clients zum Einsatz kommen, kann man dieser API-DLL noch COM-Schnittstellen (Mit GuidAttribut, ComVisible, etc.) und eine COMInterop Registrierung verpassen. Dann hat man eine saubere API, vergleichbar mit Microsoft Office, die von COM und .NET Anwendungen gleichermaßen zur fernsteuerung von Anwendung X verwendet werden kann.

So könnte z.B. eine Methode in so einer API aussehen:


[ComVisible(true)]
[Guid("DAC3E52F-C480-48D9-8D89-23691EA32029")]
[ClassInterface(ClassInterfaceType.None)]
public class AppXAutomationClient : IAppXAutomation
{
    // ...

    [DispId(1)]
    public void DoSomething(string testParam)
    {
        // Verbindung zur AnwendungX aufbauen
        IAppXAutomation service=(IAppXAutomation)Activator.GetObject(typeof(IAppXAutomation),"ipc://ApplicationX/Automation");

        // Aufruf weiterleiten
        service.DoSomething(testParam);
    }

    // ...
}

Der IPC-Kanal unterstützt auch Windows-Authentifizierung. Man kann damit sehr einfach den Benutzer des Aufrufers identifizieren.

Auf diese Weise hast Du Fernsteuerung vom Feinsten und gleichzeitig die Kompatiblität zur soliden etablierten COM-Technologie. .NET lässt (fast) keine Wünsche offen 😉.