UI für windows-Dienst in dot net
Ich habe einen windows-Dienst in dot-net zu senden automatische E-Mail an meine Freunde. Alles ist gut funktioniert. Nun habe ich eine Anforderung wie um zu zeigen, ein pop-up, das sagt die mail geschickt hat oder sowas. Aber ich brauche eine Idee zu implementieren, die Logik. Ich denke, es ist nicht möglich, eine Benutzeroberfläche für windows-Dienst. ALSO ich dachte an die Schaffung einer anderen windows-Anwendung zu zeigen, die pop-up-Nachricht und rufen Sie diese aus dem windows-Dienst, wenn die mail gesendet hat. Dies ist nur die Idee und sind nicht sicher, ist dies der richtige Ansatz. Bitte führe mich.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Beschränkung, dass windows-Dienst sollten keine GUI. Windows-Dienste können einer GUI. Aber wenn es hat, wird es gezeigt wurde, bis in Service 0. War es möglich, die in früheren Windows-Versionen vor Vista. Lässt haben eine ausführliche Diskussion über es.
Eine Anmeldesitzung erstellt, wenn ein Benutzer bei Windows anmeldet. Jede session hat eine Session-ID. Alle windows-Dienste in Sitzung 0 ausgeführt werden.
In Sitzung 0 ist, kann ein Benutzer sehen und interagieren mit der grafischen Elemente eines Programms, die dort laufen, einschließlich derjenigen, die von Windows erstellt Leistungen, die in früheren Versionen wie Windows NT, 2000, XP und Server 2003.
Später aufgrund von Sicherheitsbedenken, Microsoft isoliert die Sitzung 0 ist. Und die Wirkung ist Dienstleistungen kann nicht zeigen Ihre GUI. Dies ist eine der Fall.
Erwägen Sie, Ein Dienst versucht, zu erstellen eine Benutzeroberfläche (UI), wie eine dialog-box, in der Sitzung 0. Da der Benutzer nicht ausgeführt wird in der Sitzung 0 aufgrund der isolation der service-0, oder er sieht Sie nie das UI und kann daher nicht den input liefert, dass der service der Suche nach. Der service scheint zu funktionieren, denn es wartet auf eine Benutzeraktion, die nicht auftreten.
Aufgrund dieser isolation-Dienste kommunizieren kann, mit der Anwendungen über die Windows-Nachricht und Umgekehrt. Wir verwenden RPC, Interactive Services Detection Service (ISDS) und IPC für die Kommunikation zwischen Diensten und Anwendungen.
Teilweise richtig:
Siehe @Arun Antwort.
So müssen Sie einen Prozess mit eine GUI, die eine Schnittstelle mit dem Benutzer. Damit die beiden Anwendungen (service-und GUI) zu kommunizieren, müssen Sie einen Blick in inter-Prozess-Kommunikation (IPC).
Sehen diese Frage für einen überblick über die IPC-Mechanismen verwendbar in C#, aber in der Regel empfohlen ist die Verwendung von WCF.
IMO einfachste Möglichkeit wäre, erstellen Sie eine weitere Windows-app, die wird einfach sitzen in der Taskleiste und warten Sie Benachrichtigungen aus windows-Dienst. Für die Kommunikation mit WCF können. Ich habe ähnliche Lösung, und es funktioniert sehr gut.
Siehe das Beispiel von interprocess-Kommunikation :
http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication
Sehen "Kann ein Windows-Dienst ein GUI" in der Windows Dienste-FAQ für eine Diskussion zu diesem Thema.
Technisch die WTSSendMessage Funktion lässt die Tür offen (auch auf modernen windows-Versionen), aber Sie ist viel besser für die Gestaltung eines "headless" - service-Anwendung und das verlassen auf eine andere GUI-Komponente, um mit dem Benutzer interagieren, wie andere vorgeschlagen haben.
Ist es möglich zu zeigen, ein pop-box. Sie können add-GUI, windows-Dienste, indem die Namensraum
System.Windows.Forms
. Vor diesem klicken Sie rechts auf der Registerkarte Verweise in der Lösung vorhanden-explorer und fügen Sie diesen namespace.Nun können Sie mit einem beliebigen gui-Steuerung in diesem.
Zum Beispiel: