Windows Service WrapperJuni 2016
Winsw
Winsw ist ein Windows-Service Wrapper in C#.
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.
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.