Est-ce que NAnt peut installer ou désinstaller un service Windows, en utilisant l'utilitaire InstallUtil ou autre chose?Installer/désinstaller un service Windows dans un script de build avec NAnt
Répondre
Vous pouvez appeler la tâche de Nant exec pour appeler InstallUtil et peut passer des paramètres pour installer ou désinstaller un services facilement
<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>
Nant ou MSBuild? Quel est le problème avec l'installation d'installutil vous-même - c'est ce que vous feriez dans MSBuild. (En général, les builds ne font pas les installations pour des choses comme celle-ci, car typiquement votre build devrait pouvoir fonctionner sur un serveur de build aléatoire).
Une autre option, qui prendrait installutil de l'équation est adding a self-install option to your service like this (une recherche de plus en recherchant self install windows service
)
NAnt, désolé pour la confusion avec les étiquettes. –
J'ai un processus plus complexe qui s'exécute en dehors du service, donc je voudrais tirer parti de tout avec NAnt. –
@Brian: Cool (je suis abonné à la balise msbuild - Coller sur une balise automation-build En général, installutil n'est pas une mauvaise approche (bien que [les problèmes de bootstrap avec elle] (http://robmensching.com/blog/posts/ 2007/4/19/Managed-Code-CustomActions-no-support-on-the-way-and-heres) est certainement important d'être au courant de –
Si vous utilisez le TopShelf Project dans votre application pour héberger vos services, vous pouvez obtenir des outils en ligne de commande pour l'installation/la suppression des services sans avoir besoin InstallUtil.
service ServiceName.exe installer le service ServiceName.exe désinstaller
Et vous pouvez exécuter le service directement et obtenir une belle fenêtre de la console que vous pouvez CTRL + C pour arrêter. Vous pouvez l'intégrer directement dans nant ou msbuild en exécutant le programme.
J'ai un processus plus compliqué que cela, c'est pourquoi j'utilise NAnt pour consolider ... –
Si vous avez juste besoin de quelque chose qui appellera InstallUtil sur vos services, alors je recommande d'aller avec La réponse de mcaaltuntas. Vous pouvez même l'envelopper dans un
Si votre service peut être installé à différents endroits, vous pouvez également le désinstaller par son nom en utilisant SC.EXE, comme suit:
<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>
service :: is-installed requis nant-contrib - http://nantcontrib.sourceforge.net/release/0.85/help/functions/service.is-installed.html – Castrohenge
au lieu de faire un lien vers le chemin d'installation de installutil.exe, vous devez utiliser le nant fonctionne pour obtenir le chemin du framework en premier: framework :: get-framework-directory ('net-2.0'): http://nant.sourceforge.net/release/latest/help/functions/framework.get- framework-directory (System.String) .html –
Merci, vous avez raison, je n'étais pas au courant de cette propriété nant – mcaaltuntas