Startseite bisherige Projekte Tools/Snippets Bücherempfehlungen Publikationen Impressum Datenschutzerklärung

Windows Service WrapperJuni 2016

Winsw

Winsw ist ein Windows-Service Wrapper in C#.

externer Link https://github.com/kohsuke/winsw

Drehpunkt ist hier die Datei winsw.exe, die beliebig umbenannt werden kann. Die Datei sucht dann nach einer entsprechend benannten XML-Datei (z.B. für paserver.exe würde nach der Datei paserver.xml gesucht).

Diese XML-Datei enthält die Einstellungen für den Service:
<service>
  <id>paserverservice</id>
  <log mode="append"/>
  <name>PA Server Service</name>
  <description>...</description>
  <executable>server.exe</executable>
  <startargument></startargument>
  <stopexecutable>server.exe</stopexecutable>
  <stopargument>-stop</stopargument>
</service>

Zusätzlich wird noch eine config Datei benötigt für .NET (z.B. paserver.exe.config):
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>

Die umbenannte winsw.exe kann dann mit den Parametern install, uninstall, start, stop, restart und status aufgerufen werden.

Leider hat Winsw in Version 1.18 das Problem, dass nach einen Windows-Neustart aufgrund von Windows-Updates der Service manchmal aufgrund eines Timeouts nicht gestartet wird.
Möglicherweise ist dies der Verwendung der .NET-Technologie geschuldet.

Eine Lösung für dieses Problem ist offenbar nicht einfach (das Problem ist schon länger bekannt).

Apache Commons Daemon Procrun

Eine Alternative zu Winsw ist Apache Commons Daemon Procrun. Dieser Wrapper wurde für den Tomcat-Webserver entwickelt, funktioniert aber auch mit anderen Programmen. Die Binaries können einer Tomcat-Installation entnommen werden.

Hinweis: Neben der Möglichkeit Java-Klassen mittels eines JRE als Service zu verwenden können auch beliebige exe-Dateien verwendet werden.
externer Link https://commons.apache.org/proper/commons-daemon/procrun.html

prunsrv.exe ist der eigentliche Service-Wrapper. Prunmgr ist eine grafische Oberfläche zum Überwachen des Dienstes. Prunmgr muss in [SericeName]w.exe umbenannt werden, z.B. PAServicew.exe.

Zur Installation muss prunsrv.exe mit vielen Parametern aufgerufen werden, z.B.
//IS//PAService --DisplayName="PA Serverdienst" --Description="..." --Install="{app}\prunsrv.exe" --Startup="auto" --StartMode=exe --StopMode=exe --StartImage="{app}\PAServer.exe" --StopImage="{app}\PAServer.exe" --StopParams=-stop --StartPath="{app}" --LogPath="{app}\log" --StdOutput=auto --StdError=auto
Hinweis: {app} muss durch das Programmverzeichnis ersetzt werden.

Durch Aufruf von
prunsrv.exe //ES//PAService
kann der Service dann gestartet werden.

Ein Aufruf von
prunsrv.exe //SS//PAService
stoppt den Service dann wieder.
Impressum - Datenschutzerklärung