【发布时间】:2010-10-07 15:11:56
【问题描述】:
我需要检查是否从批处理文件安装了 Windows 服务。如果需要,我可以使用批处理以外的其他内容,但我不希望这样做。有没有办法做到这一点?
【问题讨论】:
我需要检查是否从批处理文件安装了 Windows 服务。如果需要,我可以使用批处理以外的其他内容,但我不希望这样做。有没有办法做到这一点?
【问题讨论】:
试试这个:
@echo off
SC QUERY ftpsvc > NUL
IF ERRORLEVEL 1060 GOTO MISSING
ECHO EXISTS
GOTO END
:MISSING
ECHO SERVICE MISSING
:END
请注意,SC QUERY 命令通过短服务名称而不是显示名称进行查询。您可以通过查看服务管理器中服务属性的常规选项卡找到此名称。
【讨论】:
您应该使用“查询”,而不是“停止”或其他命令,“停止”可以停止您的服务,如果它存在,那么这不是正确的方法。
@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.
【讨论】:
怎么样:
sc interrogate "nameofyourservicehere"
我发现这非常有用,因为tasklist 不会提供有关该服务是否已安装的信息。 (或者我没有找到方法)
【讨论】:
sc GetDisplayName ServiceName 可以检查已安装
这是一个使用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.
【讨论】:
你可以运行“net stop [servicename]”如果它失败了“服务名称无效”服务没有安装
【讨论】: