Wie kann ich eine Windows GUI-Anwendung als ein service?
Ich habe eine bestehende GUI-Anwendung, die sollte so umgesetzt werden wie ein service. Im Grunde, ich muss in der Lage sein, um die Remote-log-in-und ausschalten der Windows server 2003-und noch immer dieses Programm laufen.
Ist das überhaupt möglich?
EDIT: Weitere Verfeinerung hier... ich habe nicht die Quelle, es ist nicht meine Anwendung.
Weitere Verfeinerung hier... ich habe nicht die Quelle, es ist nicht meine Anwendung.
Dies ist die Art von probem, dass die system-admins haben zu lösen, jeden Tag, so Fragen Sie einen system-admin. Wie Sie den Quellcode nicht haben, dies ist keine Programmierung quesions.
Dies ist die Art von probem, dass die system-admins haben zu lösen, jeden Tag, so Fragen Sie einen system-admin. Wie Sie den Quellcode nicht haben, dies ist keine Programmierung quesions.
InformationsquelleAutor JeffV | 2008-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Windows-Dienste nicht haben, GUIs, so müssen Sie entweder loszuwerden, die GUI oder trennen Sie Ihre Anwendung in zwei Stücke - ein Dienst ohne Benutzeroberfläche, und eine "controller" - Anwendung. Wenn Sie den source-code, Umwandlung der nicht-GUI-code in einer service ist einfach - Visual Studio hat ein "Windows Service" Projekt-Typ, kümmert sich um die Verpackung für Sie, und es ist eine einfache Anleitung dazu, wie Sie erstellen Sie ein deployment-Projekt, kümmert sich um die installation.
Wenn Sie entscheiden sich für die zweite route und brauchen, um einige der original-GUI-code in eine Steuerung, die Steuerung und service kann die Kommunikation über WCF .NET Remoting oder plain socket-verbindungen mit einem Protokoll, die Sie selbst definieren. Wenn Sie Remoting sicher, dass Sie eine "klobige" - Schnittstelle, überträgt Daten mit möglichst wenigen Methodenaufrufen wie möglich - jeder Anruf hat einen fairen Betrag von overhead.
Wenn die Benutzeroberfläche ist ziemlich einfach, können Sie in der Lage sein, um Weg mit der Verwendung von Konfigurations-Dateien für die Eingabe und die log-Dateien oder das Windows-Ereignisprotokoll für die Ausgabe.
Das ist falsch. Windows-Dienste können GUIs. Dies ist der Fall, der Drucker-service, die in der Lage ist, um ein Fenster anzuzeigen.
es ist definitiv möglich, für Windows-Dienste, um zu laichen Prozesse, die eine GUI haben. Das kann was werden mit dem Drucker-service tut. Dies ist nicht das gleiche wie die service-Prozess selbst mit einer GUI. Es ist auch wahr, dass Teile des Windows-Betriebssystem kann manchmal Dinge tun, die sonst nicht erlaubt.
was ich hier gelesen habe auf der MSDN-Website die genaue? Keine interaktiven Dienste nach Vista? Oder hat "die Geschichte wieder geändert" Skeet humorvoll bringt es für ein anderes Thema. In der Zusammenfassung: "Dienste kann nicht direkt interagieren mit einem Benutzer als Windows Vista. Daher, die genannten Techniken in dem Abschnitt Über einen Interaktiven Service sollte nicht verwendet werden, die im neuen Kodex."
InformationsquelleAutor McKenzieG1
Hat jemand verwendet eine third-party-Produkt wie: Immer?
Scheint zu tun, was ich brauche. Es ist die Fähigkeit zu laufen weiter durch login /logout-Zyklen, die ich brauche. Und die Fähigkeit, zu ignorieren, dass es eine GUI-app und führen Sie es sowieso.
Müssen Sie die Verknüpfung in der exe-Datei manuell und Aufruf der WinMain oder so etwas.
InformationsquelleAutor JeffV
Können Sie wickeln Sie es in srvany, wenn Sie zuweisen müssen, es eine tatsächliche Benutzer-account (im Gegensatz zu den LocalService oder so)
InformationsquelleAutor Mark Brackett
Tun Sie es wirklich benötigen, um als Dienst ausgeführt oder benötigen Sie nur, es zu bleiben, wenn Sie nicht angeschlossen ist? Wenn letzteres, können Sie trennen, anstatt sich abzumelden und die Anwendung wird weiterhin ausgeführt. Die option sollte in der drop-down-Liste nach Auswahl von Herunterfahren oder rufen Sie tsdiscon.exe.
InformationsquelleAutor joshua
Habe ich gute Erfahrung mit winsw. Ich war in der Lage, konvertieren Sie ganz einfach meine batch-Dateien, um Dienste verwenden.
Ich habe es bei nginx auch, pro diese Antwort.
InformationsquelleAutor VitalyB
Hast du die Quelle? In vielen Fällen ist der Unterschied zwischen einer stand-alone-Anwendung und ein service sind minimal.
Meisten änderungen beziehen sich zum Einhängen der code in der service manager-richtig. Sobald Sie dies getan haben, werden Sie wissen, dass alle Probleme, die auftreten, sind ein Ergebnis Ihrer Programmierung und nicht mit irgendeinem anderen Programm.
InformationsquelleAutor Brad Bruce
Zuerst würde ich Fragen, warum Ihr Dienst benötigt eine Benutzer-Schnittstelle. Wahrscheinlich ist es nicht, aber wahrscheinlich benötigen Sie ein client ruft Daten von diesem service. Der Grund, Dienstleistungen gewöhnlich nicht über GUI ' s ist, Sie können nicht ein-Fenster-Umgebung zu laufen. Dienste starten und ausführen, ohne dass ein Benutzer angemeldet sein, um die Maschine. In diesem Fall wäre es kein desktop für den service, GUI zu laufen.
Gesagt haben, dass Sie Eigenschaften festlegen können, die auf den Dienst als Benutzer ausführen wie vorgeschlagen von Mark. Sie können auch angeben, in den Eigenschaften des Dienstes auf "Allow service to interact with desktop". Tun Sie dies nur, wenn Sie wissen, dass ein Benutzer angemeldet sein.
InformationsquelleAutor Craig Tyler
Service sollte nicht eine GUI haben, da es ausführen sollte, ohne dass Eingriffe durch einen Benutzer, und es gibt alle möglichen Probleme, die im Zusammenhang mit der Suche nach und der Kommunikation mit den richtigen desktop-Anwender.
Da, vermutlich der Grund für diese Frage ist, um in der Lage sein, aus der Ferne überwachen Sie die Anwendung, die Art und Weise, es zu tun wäre, um zwei Anwendungen. Die service-Seite (geschrieben im Grunde als eine Konsole-Anwendung) und die client/monitoring GUI-Seite. Den Dienst verwenden würden einige remote-Konnektivität (wenn ich dieses ich verwendet Named Pipes) zum kommunizieren mit der client - /monitoring-Applikation. Entweder sollte in der Lage sein zu laufen, ohne das andere, und sicherlich der Dienst sollte in der Lage sein zu laufen, mit der Kunde.
InformationsquelleAutor David L Morris
Was passiert, wenn Sie einen Dienst erstellen. Der Dienst konfigurieren, mit dem desktop interagieren. Konfigurieren und es laufen ein paar Benutzer und starten automatisch. Aus der service-Funktion CreateProcess auf dieser anderen Anwendung. Ich denke, dies ist schnell zu versuchen, mit C# (C/C++ eine Menge code, um sogar einen Dienst, wenn ich mich Recht erinnere). Würde das funktionieren??
ABER!
Mein Erster Gedanke wäre das erstellen eines virtuellen Computers in einem server-class-virtual-host (wie Virtual Server, HyperV, VMWare). Diese virtuellen Maschinen werden als service ausführen (oder was auch immer Hyper V). Die virtuelle Maschine würde immer ausgeführt werden - unabhängig davon, an-und Abmelden.
Machen diesem virtuellen computer die automatische Anmeldung an windows (TweakUI kann das einstellen) und dann einfach starten Sie die GUI-Anwendung mit einer Verknüpfung in den Autostart-Ordner. Sie können auch remote-desktop in die Sie das Programm verwenden GUI (ich Wette Immer nicht können).
InformationsquelleAutor Aardvark
Können Sie ServiceMill zu erreichen in diesem Betrieb.
Grundsätzlich installieren Sie ServiceMill Server auf Ihrem Server.
Dann klicken Sie auf die Rechte Taste über die ausführbare Datei und "Installieren als ServiceMill Service".
Als Nächstes konfigurieren Sie einige Dinge (user/Passwort, wenn Sie wollen, um die Interaktion mit desktop-oder wenn Sie bevorzugen, zu verbergen ui... und legen Sie den start-Modus Automatik).
Einem anderen tool aus dem Active+ - Software kann eine Lösung sein, ServiceMill Exe Erbauer, die ermöglicht Ihnen das erstellen von services von der Kommandozeile aus und das ist großartig, wenn Sie einen Continuous Integration-Server oder wenn Sie planen, verteilen Sie Ihre Komponente als service, ohne zu denken, über service-integration (plus es ist lizenzfrei).
InformationsquelleAutor labilbe
FireDaemonPro verwandelt sich die meisten GUI-Anwendungen in services; es ist nicht kostenlos, aber es könnte sich lohnen, es zu erhalten.
InformationsquelleAutor IneedHelp