Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if a service is running via batch file and stop it if it is not running?

I want a batch file to check if the service "MyServiceName" is running. If the service is running, I want the batch file to disable it and then display a message. If it isn't running, and is disabled, I want the batch file to display a message and then to exit. Thanks for the help.

like image 905
Gary Allen Avatar asked Jun 25 '13 13:06

Gary Allen


2 Answers

sc query MyServiceName| find "RUNNING" >nul 2>&1 && echo service is runnung
sc query MyServiceName| find "RUNNING" >nul 2>&1 || echo service is not runnung

To stop service:

net stop MyServiceName
like image 159
npocmaka Avatar answered Nov 03 '22 01:11

npocmaka


If tried to come up with a little script that makes use of the SC-command, which seems to have some limitations though (and I couldn't test it):

@echo off
setlocal enabledelayedexpansion
:: Change this to your service name
set service=MyServiceName
:: Get state of service ("RUNNING"?)
for /f "tokens=1,3 delims=: " %%a in ('sc query %service%') do (
  if "%%a"=="STATE" set state=%%b
)
:: Get start type of service ("AUTO_START" or "DEMAND_START")
for /f "tokens=1,3 delims=: " %%a in ('sc qc %service%') do (
  if "%%a"=="START_TYPE" set start=%%b
)
:: If running: stop, disable and print message
if "%state%"=="RUNNING" (
  sc stop %service%
  sc config %service% start= disabled
  echo Service "%service%" was stopped and disabled.
  exit /b
)
:: If not running and start-type is manual, print message
if "%start%"=="DEMAND_START" (
  echo Start type of service %service% is manual.
  exit /b
)
:: If start=="" assume Service was not found, ergo is disabled(?)
if "%state%"=="" (
  echo Service "%service%" could not be found, it might be disabled.
  exit /b
)

I don't know if this gives the behavior you wanted. It seems like SC does not list services, that are disabled. But since you don't want to do anything if it's disabled, my code simply prints a message if the service wasn't found.

However, you can hopefully use my code as a framework/toolbox for your purposes.

EDIT:

Given npocmaka's answer, you could probably change the for-sections to something like:

sc query %service%| find "RUNNING" >nul 2>&1 && set running=true
like image 21
marsze Avatar answered Nov 02 '22 23:11

marsze