Autor Beitrag
GPVG
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 24.01.08 17:40 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 24.01.08 17:57 
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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
GPVG Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Sa 26.01.08 20:14 
Schau mal nach CreateFileMapping(), OpenFileMapping() und MapViewOfFile(), damit können zwei Anwendungen miteinander kommunizieren.