services open msc manager windows windows-services

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)