open - ¿Cómo se puede saber si un servicio de Windows está instalado usando(preferiblemente) solo lotes?
windows services c# (5)
Aquí hay un ejemplo que usa la sc query
para verificar si un servicio de Windows está instalado y se detiene si lo encuentra.
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.
Necesito verificar si un servicio de Windows está instalado desde un archivo por lotes. Si es necesario, puedo sumergirme en otra cosa que no sea por lotes, pero preferiría no hacerlo. ¿Hay alguna manera de hacer esto?
Debe usar "consulta", no "Detener" u otro comando, el "Detener" puede detener su servicio si existe, entonces no es la forma correcta.
@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.
Prueba esto:
@echo off
SC QUERY ftpsvc > NUL
IF ERRORLEVEL 1060 GOTO MISSING
ECHO EXISTS
GOTO END
:MISSING
ECHO SERVICE MISSING
:END
Tenga en cuenta que el comando SC QUERY
consulta por el nombre corto del servicio, no por el nombre para mostrar. Puede encontrar este nombre en la pestaña General de las propiedades de un servicio en Service Manager.
puede ejecutar "net stop [servicename]" si falla con "el nombre del servicio no es válido" el servicio no está instalado
qué pasa:
sc interrogate "nameofyourservicehere"
He encontrado esto realmente útil ya que la tasklist
no proporciona información sobre si el servicio está instalado o no. (o no encontré cómo)