Does NAnt have the ability to install or uninstall a windows service, using the InstallUtil utility or whatever else?
Nant or MSBuild? What's the problem with just running installutil yourself - that's what you'd do in MSBuild. (In general, builds dont do the installs for things like this as rule as typically your build should be able to run on a random build server).
Another option, which would take installutil out of the equation is adding a self-install option to your service like this (have a search for more by looking for self install windows service
)
You can call Nant's exec task to call InstallUtil and can pass parameters to install or uninstall a service easily
<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>
If you use the TopShelf Project in your application to host your services, you can get command-line based tools for installing / removing the services without needing InstallUtil.
ServiceName.exe service install ServiceName.exe service uninstall
And you can run the service directly and get a nice console window that you can CTRL+C to stop. You can integrate this directly into nant or msbuild by executing the program.
If your service can be installed at different places, you can also uninstall it through its name using SC.EXE, as follows:
<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>