Frage

In früheren Windows-Versionen vor Vista konnte ein Windows-Dienst mit dem aktuell angemeldeten Desktop-Benutzer interagieren, um auf einfache Weise Informationen vom Dienst auf dem Bildschirm anzuzeigen.In Windows Vista wurde aus Sicherheitsgründen Sitzung 0 hinzugefügt, um die Dienste vom Desktop zu isolieren.Was ist eine einfache Möglichkeit, zwischen einem Dienst und einer Anwendung zu kommunizieren, die außerhalb von Sitzung 0 ausgeführt wird?Bisher habe ich dieses Problem dadurch umgangen, dass ich TCP/IP für die Kommunikation zwischen den beiden verwendet habe, aber das scheint mir eine ziemlich schlampige Vorgehensweise zu sein.

War es hilfreich?

Lösung

Sie können gemeinsam genutzten Speicher verwenden oder Named Pipe IPC als auch zu erleichtern. Konzeptionell ist dies ähnlich wie TCP / IP, aber Sie müssen sich keine Sorgen über einen nicht verwendeten Port zu finden.

Sie müssen sicherstellen, dass die genannten Objekte, die Sie mit „Global \“ Präfix schaffen werden, damit sie von allen Sitzungen hier .

AFAIK gibt es keine Möglichkeit für einen Dienst direkt mit dem Desktop interagieren mehr.

Andere Tipps

Tatsächlich aus Sicherheitsgründen ist es nicht mehr möglich, direkt mit dem „Desktop“ zu kommunizieren. Was genau ist der „Desktop“ auf jeden Fall, wenn Sie in einer Maschine mit mehreren aktiven Benutzern + Remote-Sitzungen leben?

Der allgemeine Weg, um das Problem zu lösen, ist Service-Anwendungen zu verwenden, die über einig RPC-Mechanismus (TCP / IP, IPC, .NET Remoting-Kanäle über einen von denen, etc.) zu kommunizieren. Seine Art von Schmerz, aber ich denke, die Vorteile sind die Änderung wert.

für den Dienst auf den Desktop zu sprechen, bist du ziemlich viel mit einem der RPC-Mechanismen stecken. Der .NET-Remoting-Mechanismus ( IpcServerChannel ) ist zu schwer, nicht zu diesem Zweck zu implementieren.

mit .NET auch eine Desktop-Anwendung können Nachrichten direkt an den Dienst mit der ServiceController.ExecuteCommand . Diese Befehle werden von dem Dienst empfangen über ServiceBase.OnCustomCommand . Das ist noch einfacher zu machen, und würde alles, was Sie brauchen, wenn der Service Steuerung ist Ihre einzige Anforderung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top