Laden...

Bestehende Applikation als Dienst installieren

Erstellt von med vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.641 Views
M
med Themenstarter:in
103 Beiträge seit 2008
vor 10 Jahren
Bestehende Applikation als Dienst installieren

Hallo zusammen

Ich habe eine existierende C# GUI Applikation, in welcher man im GUI diverse Prüfungen definieren und diese dann starten kann. Diese Prüfungen werden nun automatisch anhand einem definierten Intervall durchgeführt (jeweils in einem eigenen Thread).

Nachdem diese Prüfungen einmal gestartet wurden, benötigt man das GUI eigentlich nicht mehr (dient nur der Konfiguration) und ich würde diese Prüfungen gerne als Windows Dienst laufen lassen, damit diese auch bei einer Abmeldung von der Windows Session weiterlaufen.

Was wäre der Ansatz um dies zu realisieren? Ich stelle mir das so vor, dass man sich mit dem GUI alles konfiguriert und danach den Dienst installiert und startet. Möchte man die Konfiguration ändern oder die gesammelten Informationen auslesen, stoppt man den Dienst, startet das Programm mit dem GUI, nimmt die Änderungen vor und startet den Dienst wieder.

Ich habe mich bereits ein wenig in die Thematik zur Erstellung eines Windows Service eingelesen, doch möchte ich keine neue Software schreiben sondern die existierende als Dienst zur Verfügung stellen.

Was meint ihr dazu?

Vielen Dank für euren Input!
med

1.346 Beiträge seit 2008
vor 10 Jahren

Dafür müsstest du die Anwendung in 2 Programme aufteilen. Einen Dienst, der im Hintergrund läuft, und eine Anwendung zum Konfigurieren. Die könnte eine Konfig Datei befüllen die der Dienst dann ausließt und entsprechend arbeitet. Ein Dienst läuft in einer anderen Session und kann nicht auf der Oberfläche angezeigt werden.

LG pdelvo

2.298 Beiträge seit 2010
vor 10 Jahren

Ich könnt mir auch eine Lösung ähnlich dem Inat OPC Server vorstellen. Bei diesem gibt es nur ein Programm, in welchem Konfiguriert wird oder der Dienst ausgeführt wird.

Ich denke es wird dort in etwa so aufgebaut sein, das in der Konfiguration festgelegt ist wie die Anwendung gestartet wird. Je nachdem was dann konfiguriert ist, müsste man den richtigen Einstiegspunkt bei Start der Anwendung verwenden und könnte dann entweder die Win Forms Anwendung oder den Dienst ausführen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

R
212 Beiträge seit 2012
vor 10 Jahren

Wiso lässt du deinen dienst nicht auf eine CONFIG datei zugreifen die du ändern kannst un ddann den Dienst neu startest.

C
2.122 Beiträge seit 2010
vor 10 Jahren

Irgendwas schreiben wirst du schon müssen. Zumindest das bisherige Programm umschreiben.

Schau dir mal die Unterschiede des Programmrumpfs zwischen GUI und Dienst an. Dann baust du dein Programm so um dass es sich mit einem Parameter gestartet als Dienst verhält und ohne Parameter als fensterbasiertes Programm.

Hab das zwar noch nie ausprobiert, aber das sollte ja eigentlich schon funktionieren.

T
67 Beiträge seit 2010
vor 10 Jahren

Ich stand neulich vor einem ähnlichen Problem. Nach etwas Recherche im Netz habe ich mich dann gegen einen Dienst entschieden und mich für den Windows Taskscheduler (Aufgabenplanung) entschieden.
Statt eines Dienstes habe ich eine normale Anwendung (ohne GUI) mit Setting geschrieben.
Unter Verwendung des Scheduler kannst Du vermutlich einen Großteil deines Programms unverändert weiter nutzen. Zusätzlich bietet der Scheduler eine Überwachung mit an und kümmert sich bei Problemen um das beenden und neu starten deiner Anwendung.

A
764 Beiträge seit 2007
vor 10 Jahren

Hallo med, es gibt Programme (z.B. Winserv), mit denen man andere Programme als Dienst ausführen lassen kann. Möglicherweise funktioniert das auch bei dir. Probier das doch mal aus.

Gruß, Alf

M
med Themenstarter:in
103 Beiträge seit 2008
vor 10 Jahren

Hallo zusammen

Besten Dank für die Vorschläge.
Den Weg von chilic gefällt mir am besten und ich habe mir hierfür einmal das Gerüst für einen Test Service und dessen Installer gebaut.

Die Frage, welche sich mir nun stellt ist, was mit und evtl. auftretenden Exceptions und Meldungen (MessageBox) passiert, während dem das Programm als Service läuft. Werden diese einfach unterdrückt oder müssen diese nun anders behandelt werden?

Besten Dank
med

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo med,

MessageBoxen sollte es in einem Dienst nicht geben(*) und sie gehören auch nicht in den gemeinsamen Code, der von GUI- und Dienstversion verwendet wird.

Exceptions aus dem gemeinsamen Code, die nicht im gemeinsamen Code behandelt werden können, sollten natürlich sowohl von GUI- und Dienstversion behandelt werden.

herbivore

(*) Wenn es nach mir geht, sollte es überhaupt keine mehr geben, siehe [Snippet] Nicht-modale Abfrage als Alternative für MessageBoxen.