无法通过Ant运行Windows命令,但可以在cmd.exe上运行

时间:2011-02-01 22:37:45

标签: windows command-line ant service

我想要运行一个蚂蚁宏;

<macrodef name="serviceTask">
    <attribute name="server"/>
    <attribute name="operation"/>
    <attribute name="service"/>
    <sequential>
        <echo message="sc \\@{server} @{operation} @{service}"/>
        <exec executable="sc.exe" failonerror="true">
            <arg line="\\@{server} @{operation} @{service}"/>
        </exec>
    </sequential>
</macrodef>

<target name="startTomcat">
    <echo message="Start Tomcat ${service} on ${server}"/>
    <serviceTask server="MyServer" operation="start" service="Tomcat8180"/>
</target>

但是我收到了RPC错误:

startTomcat:
     [echo] Start Tomcat Tomcat8180 on pacdcdtadeva02
     [echo] sc \\pacdcdtadeva02 start Tomcat8180
     [exec] [SC] OpenSCManager FAILED 1722:
     [exec]
     [exec] The RPC server is unavailable.
     [exec]

stopTomcat:
     [echo] Stop Tomcat Service Tomcat8180 on pacdcdtadeva02
     [echo] sc \\pacdcdtadeva02 stop Tomcat8180
     [exec] [SC] OpenSCManager FAILED 1722:
     [exec]
     [exec] The RPC server is unavailable.
     [exec]
     [echo] -------------------------------------------------------------------
     [echo] --- Completed on 02/01/2011 05:11:42 PM
     [echo] -------------------------------------------------------------------

现在我从命令行运行它,如

sc \\stage01 start Tomcat8180

服务开始/停止

C:\usr\svn_workspaces\xIVR\agent-ivr>sc \\stage01 start Tomcat8180

SERVICE_NAME: Tomcat8180
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x1
        WAIT_HINT          : 0xbb8
        PID                : 11228
        FLAGS              :

2 个答案:

答案 0 :(得分:4)

也许这需要一个shell环境。如何尝试cmd /c sc ...

<exec executable="cmd.exe" failonerror="true">
    <arg line="/c sc \\@{server} @{operation} @{service}"/>
</exec>

答案 1 :(得分:3)

这可能对您有所帮助,但我在Windows机器上使用ant的<exec>任务也遇到问题,并结合<arg line=..>语句。 Ant只是拒绝将参数行视为具有空格的单独实体,并且当它应该是有效的时,我得到了奇怪的错误,如“无法识别的参数”。

我为每个参数交换一个<arg line=>和一个<arg value=...>后,我的问题就消失了。 我也必须像Raghuram指定的那样做,并将所有东西都包装在shell环境中。

可能值得一试。