Installieren / Deinstallieren einen Windows-Dienst in einem Build-Skript mit NAnt
-
26-09-2019 - |
Frage
Does NAnt haben die Möglichkeit, einen Windows-Dienst zu installieren oder zu deinstallieren, mit dem InstallUtil Dienstprogramm oder was sonst?
Lösung
können Sie rufen Nant exec Aufgabe InstallUtil anrufen und können Parameter übergeben installieren oder einen Service deinstallieren leicht
<target name="install-service">
<exec program="${framework::get-framework-directory('net-2.0')}\InstallUtil.exe">
<arg value="-i" />
<arg value="/name=V1" />
<arg value="C:\Service\SomeService.exe" />
</exec>
</target>
Andere Tipps
Nant oder MSBuild? Was ist das Problem mit nur läuft installutil selbst - das ist, was Sie in MSBuild tun würde. (In der Regel baut die Installationen für Dinge wie dies in der Regel tut sie nicht tun, wie sie typischerweise sollte Build der Lage sein, auf einem zufälligen Build-Server ausgeführt werden).
Eine weitere Option, die installutil aus der Gleichung nehmen würde, ist
Wenn Ihr Dienst kann an verschiedenen Orten installiert werden, können Sie auch deinstallieren es durch seinen Namen SC.EXE wie folgt verwendet: <property name="serviceName" value="Name of the service"/>
<exec program="sc" failonerror="false" verbose="true" if="${service::is-installed(serviceName,'.')}">
<arg value="delete"/>
<arg value="${serviceName}"/>
</exec>
Wenn Sie die Verwendung Topshelf Projekt in Ihrer Anwendung Ihre Dienste hosten, können Sie Befehlszeile erhalten basierte Werkzeuge für die Installation / Entfernen der Dienste ohne InstallUtil zu benötigen.
ServiceName.exe Dienst installieren ServiceName.exe Service deinstallieren
Und Sie können den Service direkt und bekommen ein schönes Konsolenfenster, dass Sie STRG + C zum Anschlag laufen. Sie können dies in Nant oder msbuild direkt integrieren, indem das Programm ausgeführt wird.