Konvertieren Sie eine Konsole-Anwendung zu einem service?
Ich bin auf der Suche nach verschiedenen Möglichkeiten, mit stärken/Schwächen zur Umwandlung einer Konsole-Anwendung, die wir verwenden, langfristig in einem windows-Dienst. Wir verwenden so genannte java-service-wrapper für den ActiveMQ, und ich glaube, die Menschen haben mir gesagt, Sie können wickeln Sie alles mit ihm. Das ist nicht zu sagen, dass, sollten Sie wickeln alles mit dabei; wir hatten unsere Probleme mit diesem setup.
Die console-app ist .NET-Konsole-Anwendung, die standardmäßig meldet eine Menge von Informationen auf die Konsole, obwohl dies konfigurierbar ist.
Jede reccomendations?
Sollten wir gerade neu erstellen Sie in Visual Studio als service? Verwenden Sie einen wrapper? Welche?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde versucht sein, erstellen Sie eine leere windows-Dienst-Projekt, und nehmen Sie einfach die bits, die sich mit einem service; es ist nicht viel - ein paar Referenzen und einige der code in
Main
. Sie können Ihre vorhandenen Konsole arbeiten beide als service und als eine Konsole - entweder durch die überprüfung der Argumente zuMain
und mit (beispielsweise) ein "-console" wechseln, oder ich glaube, Sie können überprüfenEnvironment.UserInteractive
.Wenn es in der "console" - Modus, führen Sie den code, wie Sie jetzt tun; wenn Sie in den service-Modus, führen Sie den code, den Sie ergriff und sich von der Vorlage-Projekt.
Zur info, Sie können auch haben die gleiche exe-Datei zu arbeiten, wie der installer/uninstaller für den service! Ich mache das mit "installieren" /"deinstallieren" - Schalter. Für ein Beispiel, siehe hier.
Vici WinService wird wiederum eine Konsolenanwendung in eine self-Installation von Windows Service. Es ist open-source und man kann den Quellcode herunterladen. Auch wenn Sie nicht wollen, um die Bibliothek verwenden, können Sie immer noch einige Ideen von ihm.
Einige Gedanken:
Windows-Dienst erstellen mit VS 2005
installieren .Net-Service
Schrieb ich ein paar vor einigen Jahren ein auf Perl basierender Satz von ausführbaren Dateien ( theads ) etc. ,, die scheint, haben ähnliche Anforderungen an Ihre ...
Einige Sachen, zum im Verstand zu halten:
Hier ist eine kleine Konsole zum Beispiel Ausgang zu db, Datei und Konsole mit log4net
Was ist Ihre langfristige Nutzung Szenario? Ein windows-Dienst ausreichen könnte...aber Windows Server 2008/IIS7 bietet einige faszinierende neue Möglichkeiten von hosting und aktivieren die "Dienste" über die Windows-Aktivierung-Services. Ein Windows-Dienst immer ausgeführt werden und erfordern einige spezielle Kodierung. Mit WURDE, Sie können schreiben Sie Ihren host als einem normalen WCF-service, und haben es aktiviert auf Nachfrage, wenn Anfragen kommen, und deaktiviert, wenn es nicht verwendet wird. Andere Optionen sind auch vorhanden...wie MSMQ-hosting und-Instanziierung, etc.
Ich lief in das gleiche Problem landete ich Schreibe meine eigenen wrapper, es ist nur gut für die einfachsten Situationen, aber es gibt es Vergünstigungen. Sie finden das tool hier: http://runasservice.com. Einige der Vorteile umfassen die Tatsache, dass Sie können den code Ihrer Anwendung als eine Konsole-Anwendung, die einfach zu testen, und in der IDE ausführen. Einrichtung einer service beinhaltet einen einfachen Befehl, so dass Sie nicht haben, um das Bearbeiten Ihrer Bewerbung. Auch können Sie den Dienst installieren, der mehrmals mit unterschiedlichen Namen, die Sie vielleicht tun möchten, wenn Sie möchten, führen Sie mit jeweils verschiedenen Parametern.
Wie ich sagte, obwohl es deckt nur die einfachsten Szenarien sind Anwendungen, die bereits im wesentlichen Dienstleistungen. Das ist, dass Sie durchgehend laufen. Ich bin sicher, es gibt viele andere Dienste gibt, die Ihnen eine Menge mehr Optionen.
Ich persönlich glaube nicht, dass es besonders schwierig ist, wandeln Sie eine Konsole-Anwendung, aber es kann ein Streit zu testen. Am Ende aber hängt es davon ab, wie viel Kontrolle Sie wollen. Wenn es ein wirklich wichtiger service für Ihr Unternehmen, dann würde ich sagen, es konvertieren.