Benutzer mit den meisten Antworten
Kommunikation zwischen 2 Prozessen

Frage
-
Hallo NG,
Problem:
ich stehe vor dem Problem, dass ich auf einem Rechner 2 Prozesse laufen habe. Der eine als Hintergrund-Prozess in der Task-Leiste als NotifyIcon. Der andere im Vordergrund. Dieses Programm startet das andere wenn es noch nicht läuft.
Nun möchte ich gerne den Hintergrund Prozess, aufwecken indem ich Ihm einen Int übergebe und er soll sich dann selber öffnen.
Leider habe ich bisher noch keinerlei Erfahrung wie ich zwischen 2 Prozessen in einer Richtung kommunizieren kann und auch keinen Plan.
Danke für jeden Hinweis und Tipp.
Grüße Ingo
- Typ geändert IngoManthey Sonntag, 1. Mai 2011 20:26
Antworten
-
Hallo Ingo,
Dokumentation: Verwenden von anonymen Pipes zur Kommunikation zwischen lokalen Prozessen
http://msdn.microsoft.com/de-de/library/bb546102.aspxDie Palette der Möglichkeiten ist groß und reicht von Clipboard, COM, WM_COPYDATA-Nachrichten, Windows Sockets, Memory Mapped Files (System.IO.MemoryMappedFiles), Pipes (System.IO.Pipes-Namensraum), Remoting (s. System.Runtime.Remoting-Namensraum) bis hin zum WCF, das ebenfalls Pipe-Kommunikation unterstützt. Ich würde das Einfachste auswählen (Windows-Nachricht oder anonyme Pipe).
(Lass Dich aber auch von anderen beraten)
Gruß
Marcel- Als Antwort markiert IngoManthey Sonntag, 1. Mai 2011 20:27
-
Hallo Ingo,
Marcel hat schon einige Dinge gut zusammengefasst. Auch meine Empfehlungen gehen in etwa ähnliche Richtung.
Im Prinzip hat man generelle Möglichkeiten der:
[Interprozesskommunikation – Wikipedia]
http://de.wikipedia.org/wiki/InterprozesskommunikationMöglichkeiten sind direkte "anonymen Pipes zur Kommunikation" oder etwas erweiterbarer, insbesondere dann, wenn irgendwann später mal der Prozess mal auf einen anderen Rechner wandern könnte ist WCF (Microsoft Windows Communication Foundation). Dort wäre das (u.a.) das NetNamedPipeBinding. Der Vorteil bei WCF liegt u.a. in der Erweiterbarkeit und zur gleichen Zeit ein auf computerinterne Kommunikation optimiertes Verfahren. WCF ist für Kommunikations-Zwecke seitens Microsoft heutzutage ~fast "gesetzt".
[Wählen eines Transports]
http://msdn.microsoft.com/de-de/library/ms733769.aspx[Windows Communication Foundation (WCF) Samples] Dokumentation
http://msdn.microsoft.com/en-us/library/dd483346.aspx[Download details: Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4]
http://www.microsoft.com/downloads/en/details.aspx?familyid=35EC8682-D5FD-4BC3-A51A-D8AD115A8792&displaylang=enAuch TcpClient (o.ä.) wäre denkbar, ist aber für Interoperabilität günstig, als für optimierte computerinterne Prozess-Kommunikation:
[Client-Server Kommunikation mit dem TcpClient und TcpListener]
http://dzaebel.net/TcpClientServer.htm
ciao Frank
- Als Antwort markiert IngoManthey Sonntag, 1. Mai 2011 20:27
-
Hallo Ingo,
- ... warten, ob Daten empfangen werden. Also asynchron.
Für WCF zum Beispiel:
[Vorgehensweise: Asynchrones Aufrufen von WCF-Dienstvorgängen]
http://msdn.microsoft.com/de-de/library/ms730059.aspx[Synchrone und asynchrone Vorgänge]
http://msdn.microsoft.com/de-de/library/ms734701.aspx[Vorgehensweise: Implementieren eines asynchronen Dienstvorgangs]
http://msdn.microsoft.com/de-de/library/ms731177.aspx
[WCF: Working with One-Way Calls, Callbacks, And Events]
http://msdn.microsoft.com/en-us/magazine/cc163537.aspxOder in den [WCF-Samples] die [WF_WCF_Samples\WCF\Basic\Contract\Service\Asynchronous\CS]
Beim Einbinden eines Dienstverweises vom Client aus (unter ServiceRefences) kann man ggf. unter "Client / Erweitert" auch die "Asynchrone Vorgänge aktivieren" der WCF-Dienst-Methoden auswählen.
ciao Frank- Als Antwort markiert IngoManthey Montag, 2. Mai 2011 17:05
- Tag als Antwort aufgehoben IngoManthey Montag, 2. Mai 2011 17:05
- Als Antwort markiert IngoManthey Montag, 2. Mai 2011 17:05
Alle Antworten
-
Hallo Ingo,
Dokumentation: Verwenden von anonymen Pipes zur Kommunikation zwischen lokalen Prozessen
http://msdn.microsoft.com/de-de/library/bb546102.aspxDie Palette der Möglichkeiten ist groß und reicht von Clipboard, COM, WM_COPYDATA-Nachrichten, Windows Sockets, Memory Mapped Files (System.IO.MemoryMappedFiles), Pipes (System.IO.Pipes-Namensraum), Remoting (s. System.Runtime.Remoting-Namensraum) bis hin zum WCF, das ebenfalls Pipe-Kommunikation unterstützt. Ich würde das Einfachste auswählen (Windows-Nachricht oder anonyme Pipe).
(Lass Dich aber auch von anderen beraten)
Gruß
Marcel- Als Antwort markiert IngoManthey Sonntag, 1. Mai 2011 20:27
-
Hallo Ingo,
Marcel hat schon einige Dinge gut zusammengefasst. Auch meine Empfehlungen gehen in etwa ähnliche Richtung.
Im Prinzip hat man generelle Möglichkeiten der:
[Interprozesskommunikation – Wikipedia]
http://de.wikipedia.org/wiki/InterprozesskommunikationMöglichkeiten sind direkte "anonymen Pipes zur Kommunikation" oder etwas erweiterbarer, insbesondere dann, wenn irgendwann später mal der Prozess mal auf einen anderen Rechner wandern könnte ist WCF (Microsoft Windows Communication Foundation). Dort wäre das (u.a.) das NetNamedPipeBinding. Der Vorteil bei WCF liegt u.a. in der Erweiterbarkeit und zur gleichen Zeit ein auf computerinterne Kommunikation optimiertes Verfahren. WCF ist für Kommunikations-Zwecke seitens Microsoft heutzutage ~fast "gesetzt".
[Wählen eines Transports]
http://msdn.microsoft.com/de-de/library/ms733769.aspx[Windows Communication Foundation (WCF) Samples] Dokumentation
http://msdn.microsoft.com/en-us/library/dd483346.aspx[Download details: Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4]
http://www.microsoft.com/downloads/en/details.aspx?familyid=35EC8682-D5FD-4BC3-A51A-D8AD115A8792&displaylang=enAuch TcpClient (o.ä.) wäre denkbar, ist aber für Interoperabilität günstig, als für optimierte computerinterne Prozess-Kommunikation:
[Client-Server Kommunikation mit dem TcpClient und TcpListener]
http://dzaebel.net/TcpClientServer.htm
ciao Frank
- Als Antwort markiert IngoManthey Sonntag, 1. Mai 2011 20:27
-
Hallo NG,
ich denke in meinem kontreten Fall ist die Verwendung von anonymen Pipes das beste. Da ich immer nur auf dem selben Rechner zwischen den Prozessen kommunizieren werde.
Ich habe aber ein Problem.
Ich möchte das der Client nicht nur beim Starten wie in dem Beispiel Daten austauscht und dann die pipe schließt. Ich benötige eine dauernde Verbindung. Außerdem soll der Client im einem Thread warten, ob Daten empfangen werden. Also asynchron. Leider finde ich nicht wie der Stream asynchron geöffnet werden kann.
Danke für jeden Hinweis und Tipp.
Grüße Ingo
-
Hallo Ingo,
- ... warten, ob Daten empfangen werden. Also asynchron.
Für WCF zum Beispiel:
[Vorgehensweise: Asynchrones Aufrufen von WCF-Dienstvorgängen]
http://msdn.microsoft.com/de-de/library/ms730059.aspx[Synchrone und asynchrone Vorgänge]
http://msdn.microsoft.com/de-de/library/ms734701.aspx[Vorgehensweise: Implementieren eines asynchronen Dienstvorgangs]
http://msdn.microsoft.com/de-de/library/ms731177.aspx
[WCF: Working with One-Way Calls, Callbacks, And Events]
http://msdn.microsoft.com/en-us/magazine/cc163537.aspxOder in den [WCF-Samples] die [WF_WCF_Samples\WCF\Basic\Contract\Service\Asynchronous\CS]
Beim Einbinden eines Dienstverweises vom Client aus (unter ServiceRefences) kann man ggf. unter "Client / Erweitert" auch die "Asynchrone Vorgänge aktivieren" der WCF-Dienst-Methoden auswählen.
ciao Frank- Als Antwort markiert IngoManthey Montag, 2. Mai 2011 17:05
- Tag als Antwort aufgehoben IngoManthey Montag, 2. Mai 2011 17:05
- Als Antwort markiert IngoManthey Montag, 2. Mai 2011 17:05