Announcement

Collapse
No announcement yet.

Kommunikation unter verschiedenen Programmen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kommunikation unter verschiedenen Programmen

    Hallo zusammen

    Weiss jemand wie ich von einem Programm aus ein anderes Programm steuern kann (beides .NET assemblies)?
    Typisches Beispiel ist der HTML-Link in einem Tool: Ich klicke drauf und im geöffneten Browser wird ein neuer Tab mit dieser Adresse gezeigt.

    Wenn das Empfänger-Programm nicht läuft wäre die Sache einfach, dann kann man einfach über Parameter beim Kommandozeilenaufruf bestimmen was beim Empfänger-Programm passieren soll. Was kann man aber machen wenn das betreffende Programm bereits läuft und dort die Aktion passieren soll?

    Gruss

  • #2
    Es gibt dutzende Möglichkeiten alle zusammengefasst unter dem Stichwort IPC (InterProcess Communication). TCP, NamedPipes, Message Queues, Memory Mapped Files, Windows Messages, File System .... u.s.w.

    Comment


    • #3
      Das hängt stark davon ab, um welche Programme es sich handelt und ob sie beide von Dir selbst stammen oder von Drittanbietern sind.

      Jede Anwendung hat meist ein bis zwei "favorisierte" Schnittstellen. (Ältere?) Microsoft Programme werden z.B. gerne über die COM Schnittstelle angesteuert. Andere Anwendungen bevorzugen RFC oder eine der Technologien, die Ralf angesprochen hat.

      Du solltest also die Dokus der Anwendungen, die du Ansprechen willst nach Stichworten wie "API" und "IPC" durchsuchen.

      Comment


      • #4
        Beide Anwendungen stammen von mir (bzw. werden von mir stammen).
        Übertragen muss ich nur ein paar ID's, den Rest wird der Client machen.

        Ich werde die Technologien mal durchgehen.

        Gruss

        Comment


        • #5
          Hallo,

          eine relativ einfach umzusetzende Möglichkeit wäre hierfür WCF - siehe WCF Tutorial - Basic Interprocess Communication

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Ist es nicht ein bischen mit Kanonen auf Spatzen geschossen gleich WCF einzusetzen?

            Comment


            • #7
              Hallo,

              ich finde nicht, denn es ist mMn eine der einfachsten Möglichkeiten der IPC und mit Named-Pipes-Bindung sehr performant.

              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Aber sollte man da nicht vorher erstmal verstehen was da drunter vorgeht? Ich bin immer etwas puristischer veranlagt und verstehe gerne was da unter der Haube vor geht. WCF ist schon ein ziemlich großer Brocken und ziemlich krasse Abstraktion.

                Comment


                • #9
                  Mit WCF kann ich eine Kommunikation aufbauen und benötigte dafür keine 10 Zeilen Code (nach all dem was ich bisher gefunden und probiert habe), das zählt für mich.
                  Ein Verständnis der Zusammenhänge ist sicher sinnvoll aber weshalb das Rad gleich mehrmals erfinden?

                  Gruss

                  Comment


                  • #10
                    Hallo Florian,

                    ich bin ich auch der Meinung, dass ein Verständnis von dem vorhanden sein sollte, was "unter der Haube" passiert. Anders ist entwickeln nicht vernüftig möglich. D.h. aber nicht zwangsläufig dass somit alles von der Pike auf selbst nachprogrammiert bzw. erarbeitet werden muss, sondern es reicht ein fundiertes Verständnis vom Konzept und den Vorgängen die sich dort abspielen. Es ist sozusagen ein Trade-Off zwischen Produktivität und Detail-Wissen, bei dem ich dann doch eher zur Produktivität tendiere. Das Detail-Wissen kommt mit der Zeit, sofern die/alle Details überhaupt relevant sind.

                    Kurz: eine Technologie sollte nicht als Black-Box betrachtet werden, sondern wenigstens als Gray-Box.

                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Stimme ich Dir zu. Am Besten zuerst einen kleinen prove of concept in der Originaltechnologie bauen (hier named pipes) und danach das Abstraktionsframework verwenden. Vielleicht stellt man dann auch fest dass einem der einfache Ansatz über die Basistechnologie reicht. Ich vermeide es möglichst immer gleich die große Technologie Keule zu schwingen.

                      Ich für meinen Geschmack mag das Gefühl die Kontrolle über das System zu haben für den Fall dass etwas nicht funktioniert. Ich möchte persönlich möglichst an allen Punkten in der Pipeline eingreifen können sofern es nötig ist. Da WCF aber noch eine Abstraktion über Services im allgemeinen ist muss ich falls ein Problem auftritt erstmal verstehen ob es ein WCF Problem oder ein Problem der darunter liegenden Technik ist. Deswegen lieber erst die Technik darunter verstehen bevor man zur Abstraktionskeule greift.
                      Das ist aber leider auch insgesamt ein Problem der Welt der "großen Programmiersprachen". In Java und .Net gibt es relativ viele sehr sehr schwergewichtige Frameworks. Die Frameworks können viel, das will ich gar nicht in Frage stellen, nur leider ist der Abstraktionsgrad oft sehr hoch. Gerade wenn man nun an die Grenzen dieser Abstraktion stößt muss man sehr oft a, mit hacks leben oder b, es geht einfach nicht. Deswegen würde ich mir an dieser Stelle wünschen kleinere Frameworks zu haben die sich leicht zusammenbauen lassen, damit ich tatsächlich die Kontrolle über meinen Code behalte. Klar muss ich dafür die ein oder andere Zeile Code mehr tippen, aber ich verstehe überall was abgeht.
                      Im Prinzip brauche ich nur 2 Sachen:
                      - Serialisieren/Deserialisierung der Daten (JSON, Protobuf, XML...)
                      - Übertragen der Daten

                      WCF würde ich persönlich nur dann verwenden wenn sich der Typ des Protokolls irgendwann ändern wird (z.B. von SOAP auf JSON o.ä.) und selbst dann ist es vermutlich auch nicht ganz ohne manuellen Eingriff möglich, da in komplexeren Datenstrukturen die de-/serialisierung nicht immer ganz einfach ist.

                      Comment


                      • #12
                        In deiner Antwort stecken mir zuviele ichs und meins
                        Wenn das tatsächlich der ureigenste Code ja dann würde ich auch versuchen nah an die eigentliche Technik ranzukommen. Bei meinen eigenen Code gehts ja mehr ums erlernen und verstehen. Wenn das aber Auftragscode ist würde ich mir sehr genau überlegen wer das Weiterführen soll und im welchen Umfeld das eingesetzt wird. Was ist besser getestet WCF oder der fanderlf Code? Wer ist einfacher zu bekommen ein WCF Spezialist oder ein fanderlf Code Spezialist?

                        Comment


                        • #13
                          Alle Details kann man heute sowieso nicht mehr verstehen. Ich habe mal eine kleines "Programm" geschrieben mit nur einer Anweisung:
                          Code:
                           
                          Public Sub Main()
                             Exit Sub
                          End Sub
                          Ich habe so viel wie möglich deaktviert, man sollte meinen da passiert nicht viel wenn das Programm läuft.
                          Wenn ich via Process Monitor nachsehe was da alles abläuft haut es mich fast um: 250 Registry und 371 Datei Operationen!

                          Den Überblick über alles kann niemand mehr haben.

                          Gruss

                          Comment


                          • #14
                            Das hängt vom Programm ab und vom Prozess, also welche Rechte du auch hast. Unter Linux kann man das mit IPC wunderbar machen und wird auch sehr viel gemacht. Bei Windows ist dies auch möglich. Ich weiß jedoch, dass du eventuell auf einige Prozesse keinen Zugriff hast und somit die "Routine" fehlschlagen wird bzw. du bekommt eine Meldung, dass es nicht geht.

                            Comment

                            Working...
                            X