Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
bat файлы и студия
 
Есть бат файл который останавливает мой сервис
Код
net stop myService

Этот бат файл я прописал на выполнение, при компиляции, в вижуал студии.
Проблема в том что если сервис не запущен - то его при попытке остановить его в бат файле будет ошибка. После этого студия откажется компилить дальше.
  • Можно ли определить запущен ли сервис ?
  • Можно ли игнорировать ошибки в бат файле?
  • Можно ли игнорировать ошибки бат файла в студии ?
 
На тему определения работает ли служба используй: sc query ИмяСлужбы
 
Цитата
Можно ли игнорировать ошибки в бат файле?
net stop myService >nul 2>&1
Цитата
Можно ли определить запущен ли сервис ?
Код
@echo off
for /f "delims=" %%i in ('sc query MyService ^| findstr /i "running"') do (
   if errorlevel 1 (
   echo Not Running
   ) else (
   echo Running 
   )
)
 
Цитата
01MDM
Спасиб твой 1-й способ помог.

Код
@echo off
for /f "delims=" %%i in ('sc query MyService ^| findstr /i "running"') do (
   if errorlevel 1 (
   echo Not Running
   ) else (
   echo Running
   )
) 


А вот это не очень помогло, чёто оно ни на тру ни на фолс не срабатывает.
 
Попробуй так:
Код
@echo off

for /f "tokens=4" %%i in ('sc query ServiceName ^| findstr /i "state"') do (
   set checksrv=%%i
)
if %checksrv%=="running" (
       :: Код если служба запущена:
       echo ServiceName %checksrv%
       ) else (
       :: Код если служба остановлена:
       echo ServiceName %checksrv%
       )



Если в названии сервиса есть пробелы, заключи его в кавычки
 
01MDM,
а так работает, спасибо большое.
 
Хотя как-то странно работает.

_start.cmd

Код
@echo off

for /f "tokens=4" %%i in ('sc query PMService ^| findstr /i "state"') do (
   set checksrv=%%i
)
if %checksrv%=="RUNNING" (
       echo PMService %checksrv%, exit
       ) else (
       echo PMService %checksrv%, starting
       net start PMService
       )


_stop.cmd
Код
@echo off

for /f "tokens=4" %%i in ('sc query PMService ^| findstr /i "state"') do (
   set checksrv=%%i
)
if %checksrv%=="RUNNING" (
       echo PMService %checksrv%, stopping
       net stop PMService
       ) else (
       echo PMService %checksrv%, exit
       )


результаты выполнения
Код
D:\Work\PM\PMService\bin\Debug>_stop
PMService RUNNING, exit

D:\Work\PM\PMService\bin\Debug>_stop
PMService RUNNING, exit

D:\Work\PM\PMService\bin\Debug>_start
PMService RUNNING, starting
The requested service has already been started.

More help is available by typing NET HELPMSG 2182.


D:\Work\PM\PMService\bin\Debug>_start
PMService RUNNING, starting
The requested service has already been started.

More help is available by typing NET HELPMSG 2182.


D:\Work\PM\PMService\bin\Debug>_stop
PMService RUNNING, exit

D:\Work\PM\PMService\bin\Debug>


По ходу всегда else
 
Если просто запустить\остановить, то вполне хватит sc start\stop ServiceName >nul 2>&1

Ну или _start.cmd
Код
@echo off
for /f "tokens=4" %%i in ('sc query PMservice ^| findstr /i "state"') do (
   set chsrv=%%i
)
if "%chsrv%"=="STOPPED" Call :startserv
goto:eof
:startserv
sc stop PMservice >nul


_stop.cmd
Код
@echo off
for /f "tokens=4" %%i in ('sc query PMservice ^| findstr /i "state"') do (
   set chsrv=%%i
)
if "%chsrv%"=="RUNNING" Call :stopserv
goto:eof
:stopserv
sc stop PMservice >nul
 
01MDM,
Код
sc start\stop ServiceName >nul
хватило вполне. А скрипты так и не заработали у меня. Криворукий я наверно.
Страницы: 1
Читают тему