Entwickler-Ecke

Windows API - Wie kann mein Programm einem Dienst Nachrichten senden?


GPVG - Do 24.01.08 17:40
Titel: Wie kann mein Programm einem Dienst Nachrichten senden?
Und natürlich auch: Wie kann der Dienst meinem Programm Nachrichten schicken?
Noch ein kleiner Haken dabei: Der Dienst läuft unter einem anderen Account.

Bisher haben sich Anwendung und Dienst immer über Schreiben und Auslesen einer Datei verständigt, aber das ist sicher nicht gerade die professionelle Variante.

Hat jemand eine Idee?

Vielen Dank für die Hilfe.


Martok - Do 24.01.08 17:57
Titel: Re: Wie kann mein Programm einem Dienst Nachrichten senden?
user profile iconGPVG hat folgendes geschrieben:
Bisher haben sich Anwendung und Dienst immer über Schreiben und Auslesen einer Datei verständigt, aber das ist sicher nicht gerade die professionelle Variante.

Eigentlich schon... Zumindest machen das viele. Wenn auch keine im Dateisystem, sondern eher Named Pipes. Was man mit denen machen kann steht IMHO irgendwo unter Suche im MSDN CREATEFILE.


Sinspin - Do 24.01.08 18:14

Entweder wie angesprochen über Named Pipes oder über Sockets. Allerdings sollen Sockets recht langsam sein.
Eine weitere Variante wäre noch Shared Memory. Das ist dann die schnellste Lösung die mir einfällt.


GPVG - Fr 25.01.08 09:46

In Ordnung, wie Pipes grundsätzlich funktionieren, weiß ich als alter Linux-Freak.
Da mein Programm für Windows 2k und nachfolgende sein soll, dürfte das also nicht das Problem sein.

Jetzt kommen wir aber zum nächsten Punkt, der unter Windows nicht so ganz unwichtig ist.
Der Dienst läuft mit Systemrechten und nicht jeder soll ihn benutzen können. Die Frage ist, wie der Dienst erkennen kann, wer ihm da etwas durch die Pipe schickt, damit er dann (zum Beispiel über Gruppenmitgliedschaften) entscheiden kann, ob der User überhaupt berechtigt zu dieser Aktion ist.
Klar, der User könnte seinen Namen mitschicken, nur könnte das ja auch gelogen sein.

Gleich noch die andere Frage:
Wie läuft das mit Sockets? Die Geschwindigkeit sollte nicht so sehr problematisch sein, da die Nachricht nur einen sehr kurzen Text enthält und mein Programm nur auf ein "ausgeführt" beziehungsweise "nicht ausgeführt" wartet.


AHT - Sa 26.01.08 18:40

Nur als Anregung - habe selbst noch nichts mit Pipes gemacht, vielleicht hilfts ja: Wo ein Security Descriptor im Spiel ist, dürfte das Verbieten von irgendwelchen Sachen doch eigentlich kein Problem sein - oder?


sk0r - Sa 26.01.08 20:14

Schau mal nach CreateFileMapping(), OpenFileMapping() und MapViewOfFile(), damit können zwei Anwendungen miteinander kommunizieren.