【问题标题】:Install/Uninstall a Windows Service in a build script with NAnt使用 NAnt 在构建脚本中安装/卸载 Windows 服务
【发布时间】:2011-03-25 22:00:55
【问题描述】:

NAnt 是否能够使用 InstallUtil 实用程序或其他任何工具安装或卸载 Windows 服务?

【问题讨论】:

    标签: windows windows-services build-automation nant installutil


    【解决方案1】:

    您可以调用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>
    

    【讨论】:

    【解决方案2】:

    Nant 还是 MSBuild?自己运行 installutil 有什么问题 - 这就是您在 MSBuild 中所做的。 (一般来说,构建不会像这样作为规则进行安装,因为通常您的构建应该能够在随机构建服务器上运行)。

    另一个选项是 adding a self-install option to your service like this(通过寻找 self install windows service 来搜索更多信息)

    【讨论】:

    • NAnt,很抱歉与标签混淆。
    • 我有一个在服务之外运行的更复杂的过程,所以我想用 NAnt 来利用一切。
    • @Brian: 很酷(我订阅了 msbuild 标签 - 坚持使用构建自动化标签。一般来说 installutil 不是一个坏方法(尽管the bootstrapping issues with it 绝对重要的是要注意
    【解决方案3】:

    如果你的服务可以安装在不同的地方,你也可以使用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>
    

    【讨论】:

    【解决方案4】:

    如果您在应用程序中使用TopShelf Project 来托管您的服务,您可以获得基于命令行的工具来安装/删除服务,而无需 InstallUtil。

    ServiceName.exe 服务安装 ServiceName.exe 服务卸载

    您可以直接运行该服务并获得一个漂亮的控制台窗口,您可以 CTRL+C 停止该窗口。您可以通过执行程序将其直接集成到 nant 或 msbuild 中。

    【讨论】:

    • 我有一个比这更复杂的过程,这就是为什么我使用 NAnt 来巩固...
    • 如果您只需要在您的服务上调用 InstallUtil 的东西,那么我建议您使用 mcaaltuntas 的答案。您甚至可以将它包装在 nant 中的 中,它将迭代所有 .exe 或所有服务并为您安装。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多