Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
COM Interface für die eigene Application
VJones
myCSharp.de - Member



Dabei seit:
Beiträge: 19
Herkunft: Stuttgart

Themenstarter:

COM Interface für die eigene Application

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3.728
Herkunft: Mauer

Fernsteuern

beantworten | zitieren | melden

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 .
private Nachricht | Beiträge des Benutzers