Installa / Disinstalla un servizio Windows in uno script di build con NAnt
-
26-09-2019 - |
Domanda
non NAnt hanno la capacità di installare o disinstallare un servizio di Windows, utilizzando l'utilità InstallUtil o qualsiasi altra cosa?
Soluzione
È possibile chiamare exec compito di Nant chiamare InstallUtil e in grado di passare i parametri per installare o disinstallare un servizio facilmente
<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>
Altri suggerimenti
Nant o MSBuild? Qual è il problema con un solo correre installutil te stesso - questo è quello che ci si fa in MSBuild. (In generale, costruisce Dont le installazioni per le cose come questo come regola come tipicamente la build dovrebbe essere in grado di girare su un server di generazione casuale).
Un'altra opzione, che potrebbe assumere installutil fuori dell'equazione è l'aggiunta di un auto-installazione opzione per il vostro servizio come questo (hanno una ricerca di più, cercando di self install windows service
)
Se il servizio può essere installato in luoghi diversi, è anche possibile disinstallarlo tramite il suo nome utilizzando Sc.exe, come segue:
<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>
Se si utilizza il TopShelf Progetto nell'applicazione per ospitare i vostri servizi, è possibile ottenere da riga di comando strumenti basati per l'installazione / rimozione dei servizi senza bisogno InstallUtil.
Servizio ServiceName.exe installare servizio ServiceName.exe uninstall
E si può eseguire il servizio direttamente e ottenere una bella finestra di console che è possibile CTRL + C per fermata. È possibile integrare questo direttamente in Nant o MSBuild eseguendo il programma.