Gibt es eine Möglichkeit zum starten einer GUI-Anwendung von einem windows-Dienst unter Windows 7?
Ich habe eine Menge suchen, um einen Weg finden, starten Sie eine GUI-Anwendung von einem windows-Dienst unter Windows 7. Das meiste, was ich gefunden habe, ist, dass mit Windows 7 Dienste laufen nun in einem separaten Benutzer-session und können nicht angezeigt grafische Benutzeroberfläche für den aktuellen Benutzer. Ich Frage mich, ist es irgendeine Art von Abhilfe oder andere Weise der Erfüllung so etwas? Kann den service starten eines Prozesses in einer anderen Benutzer-session?
- warum schreiben Sie nicht eine windows-Anwendung, geplant durch den windows-scheduler
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese änderung wurde vorgenommen, einen Grund und nicht einfach nur zu ärgern-Entwickler. Der richtige Ansatz ist, um Ihre Benutzeroberfläche in ein anderes Programm und die Kommunikation mit dem session durch ein Rohr, oder einen anderen IPC-Mechanismus. Die Empfehlung, die Dienste nicht vorhanden-UI ist mehr als 10 Jahre alt.
Sollten Sie wirklich versuchen, diese Regeln zu befolgen, auch wenn es scheinen mag unbequem zu beginnen. Auf der plus-Seite werden Sie genießen Sie den Vorteil, halten Sie Ihre service Logik-und UI-Logik separate
Wenn Ihr services läuft unter dem Konto "LOCALSYSTEM" dann können Sie "Allow service to interact with desktop", zum nutzen der legacy-Dienste, die scheitern würden, wenn Sie nicht zeigen konnte, UI. Aber es wird nicht helfen Sie trotzdem, weil die UI zeigt, der in Sitzung 0 ist, wo es noch nie gesehen!
Empfehle ich Ihnen, ein Lesen der offiziellen Microsoft-Dokument beschreibt die isolation von Sitzung 0.
Gibt es eine Möglichkeit, dies zu tun.
Wenn Sie brauchen, um zu zeigen, eine einfache message-box können Sie die WTSSendMessage Routine.
Wenn Sie eine komplexe UI-Elemente, die Sie können es in einem separaten Programm, und Sie verwenden müssen, um CreateProcessAsUser-Routine.
In diesem Beispiel bereitgestellt von microsoft können Sie sehen, der Prozess.
http://blogs.msdn.com/b/codefx/archive/2010/11/26/all-in-one-windows-service-code-samples.aspx
Windows 7 eingeführt, die sogenannte "Session 0 isolation", das in der Praxis bedeutet, dass jeder Dienst (mit Ausnahme der system-services) werden in einem separaten nicht-interaktive Sitzung. Aus diesem Grund können Sie nicht direkt eine GUI innerhalb des service, außer wenn Sie im legacy-Modus ausgeführt wird durch das gesetzte die die Interaktion Mit Destop option, die ist nicht gut, wenn Sie ausführen möchten, Ihren Dienst für einige Jahre in der Zukunft.
Als David Heffernan sagte, das beste ist die Verwendung einer client-server-Architektur. WCF macht es einfach, die Kommunikation mit named pipes.
Auf dieser Seite ist ein guter Ausgangspunkt, um zu Lesen über Session-0-Isolation und dieses white paper ist auch sehr gut.