【问题标题】:How does one find out if a Windows service is installed using (preferably) only batch?如何确定是否使用(最好)仅批处理安装了 Windows 服务?
【发布时间】:2010-10-07 15:11:56
【问题描述】:

我需要检查是否从批处理文件安装了 Windows 服务。如果需要,我可以使用批处理以外的其他内容,但我不希望这样做。有没有办法做到这一点?

【问题讨论】:

    标签: windows windows-services


    【解决方案1】:

    试试这个:

    @echo off
    SC QUERY ftpsvc > NUL
    IF ERRORLEVEL 1060 GOTO MISSING
    ECHO EXISTS
    GOTO END
    
    :MISSING
    ECHO SERVICE MISSING
    
    :END
    

    请注意,SC QUERY 命令通过短服务名称而不是显示名称进行查询。您可以通过查看服务管理器中服务属性的常规选项卡找到此名称。

    【讨论】:

      【解决方案2】:

      您应该使用“查询”,而不是“停止”或其他命令,“停止”可以停止您的服务,如果它存在,那么这不是正确的方法。

      @echo OFF
      
      set _ServiceName=SomeServiceName
      
      sc query %_ServiceName% | find "does not exist" >nul
      if %ERRORLEVEL% EQU 0 echo Service Does Not Exist.
      if %ERRORLEVEL% EQU 1 echo Service Exist.
      

      【讨论】:

      • 这仅适用于英文版的 windows 吗?
      【解决方案3】:

      怎么样:

      sc interrogate "nameofyourservicehere"
      

      我发现这非常有用,因为tasklist 不会提供有关该服务是否已安装的信息。 (或者我没有找到方法)

      【讨论】:

      • 这会检查服务是否正在运行。但是sc GetDisplayName ServiceName 可以检查已安装
      【解决方案4】:

      这是一个使用sc query 来验证是否安装了 Windows 服务并在找到时停止的示例。

      sc query | find /I "%tmpServiceName%" > nul
      if not errorlevel 1 echo. && net stop %tmpServiceName%
      if errorlevel 1 echo.   - Windows service %tmpServiceName% is not running or doesn't exist.
      

      【讨论】:

        【解决方案5】:

        你可以运行“net stop [servicename]”如果它失败了“服务名称无效”服务没有安装

        【讨论】:

        • 错了!甚至可能不希望某些服务短暂暂停,而且某些服务受到保护并且无法停止。
        • 我也同意这不应该被标记为答案,尽管它在某些情况下可以工作。
        猜你喜欢
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-14
        • 2011-06-01
        • 1970-01-01
        相关资源
        最近更新 更多