【发布时间】:2011-03-25 22:00:55
【问题描述】:
NAnt 是否能够使用 InstallUtil 实用程序或其他任何工具安装或卸载 Windows 服务?
【问题讨论】:
标签: windows windows-services build-automation nant installutil
NAnt 是否能够使用 InstallUtil 实用程序或其他任何工具安装或卸载 Windows 服务?
【问题讨论】:
标签: windows windows-services build-automation nant installutil
您可以调用Nant的exec任务调用InstallUtil,并可以通过参数轻松安装或卸载服务
<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 还是 MSBuild?自己运行 installutil 有什么问题 - 这就是您在 MSBuild 中所做的。 (一般来说,构建不会像这样作为规则进行安装,因为通常您的构建应该能够在随机构建服务器上运行)。
另一个选项是 adding a self-install option to your service like this(通过寻找 self install windows service 来搜索更多信息)
【讨论】:
如果你的服务可以安装在不同的地方,你也可以使用SC.EXE通过名字卸载它,如下:
<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>
【讨论】:
如果您在应用程序中使用TopShelf Project 来托管您的服务,您可以获得基于命令行的工具来安装/删除服务,而无需 InstallUtil。
ServiceName.exe 服务安装 ServiceName.exe 服务卸载
您可以直接运行该服务并获得一个漂亮的控制台窗口,您可以 CTRL+C 停止该窗口。您可以通过执行程序将其直接集成到 nant 或 msbuild 中。
【讨论】: