Как написать bat файл для запуска службы

Возникла необходимость автоматизировать для пользователей запуск и остановку определенной службы Windows. Самое просто на первый взгляд, создание батника или Bat файла Windows. Есть и другие варианты, но решил сделать именно через батник.

Пишем BAT(батник) файл для запуска и остановки службы в Windows

Вроде все не сложно, но как всегда в Windows все не так просто, или просто, но глупо.

1. Задача:
В системе есть программа, и её Бета-версия. Запуск основной, по ярлыку. Запуск Бета-версии только после запуска службы, по окончанию, отключение этой службы. Ничего сложного нет, зайти в службы и в зависимости от задачи «включить/выключить». Но вот для некоторых сотрудников это целая проблема. Поэтому пишем батник!

2. Структура батника. После поиска структуры батника, пришел к этому варианту:

net stop [имя службы в Windows](остановить службу)

net start [имя службы в Windows](запустить службу)

3. Меняем отражение расширений файлов. По умолчанию в Windows не отражаются расширения файлов. Правим на примере Windows 10:
— открываем любую папку;
— вверху вкладка «Вид», «Параметры», «изменить параметры папок и поиска»;
— вкладка «Вид», спускаемся до поля «Скрывать расширения для…» — снимаем галку.

Теперь файлы, в частности на рабочем столе имеют вид (на примере TXT файла):
Было «Файл», Стало «Файл.txt»

4. Создаем файл батника. Создаем «txt» файл и переименовываем его в «Запуск службы.txt». Открываем, пишем наш Bat файл:

net start [имя службы в Windows]


Где взять имя службы?
Открываем службы, находим нужную, открываем и смотрим поле «Имя службы»:

Пишем BAT(батник) файл для запуска и остановки службы в Windows

В итоге у нас будет:

net start AtolLicSvc(Если служба AtolLicSvc, у вас ваш вариант)

Сохраняем и переименовываем файл с «Запуск службы.txt» в «Запуск службы.bat«

5. Проверяем работу службы. Казалось бы все! Но нет! Это же Windows! Выскакивает окно запуска службы и пропадает. А служба как спала так и спит. Что не так? Все дело в правах админа. Вроде не сложно, но пояснять сотрудникам, запускайте с правами админа, слишком сложно для их понимания! Читаем по быстрому инфу «как запустить bat файл от имени админа автоматический?», ответ:

ничего сложного…
— «правой кнопкой мыши на файле», «свойства»;
— вкладка «ярлык», … эмм… а где она? О_о

6. Вносим правки, создаем ярлык

Логично, вкладки нет, это не ярлык! Создаем из нашего батника «Запуск службы.bat» «Ярлык»: убираем батники подальше от рук пользователей, допустим на диск D. Правой кнопкой мыши на батнике: «отправить», «рабочий стол (создать ярлык)». И вот уже на ярлыке:

— «правой кнопкой мыши на ярлыке», «свойства»;
— вкладка «ярлык», кнопка «Дополнительно»;
— ставим галку «запуск от имени администратора».

7. Повторный запуск службы через BAT файл.
После этих манипуляций, если запустить ярлык «Запуск службы.bat — ярлык», служба стартует, согласно структуре в файле «net start AtolLicSvc»

Пишем BAT(батник) файл для запуска и остановки службы в Windows

Для батника который будет останавливать службу, все тоже самое. И да, вариантов решения задачи много, спорить не буду, но описал вариант решения который применил сам.

Источник: http://linuxsql.ru

How can I script a bat or cmd to stop and start a service reliably with error checking (or let me know that it wasn’t successful for whatever reason)?

mmcdole's user avatar

mmcdole

90.8k60 gold badges185 silver badges222 bronze badges

asked Sep 25, 2008 at 15:09

Keng's user avatar

0

Use the SC (service control) command, it gives you a lot more options than just start & stop.

  DESCRIPTION:
          SC is a command line program used for communicating with the
          NT Service Controller and services.
  USAGE:
      sc <server> [command] [service name]  ...

      The option <server> has the form "\ServerName"
      Further help on commands can be obtained by typing: "sc [command]"
      Commands:
        query-----------Queries the status for a service, or
                        enumerates the status for types of services.
        queryex---------Queries the extended status for a service, or
                        enumerates the status for types of services.
        start-----------Starts a service.
        pause-----------Sends a PAUSE control request to a service.
        interrogate-----Sends an INTERROGATE control request to a service.
        continue--------Sends a CONTINUE control request to a service.
        stop------------Sends a STOP request to a service.
        config----------Changes the configuration of a service (persistant).
        description-----Changes the description of a service.
        failure---------Changes the actions taken by a service upon failure.
        qc--------------Queries the configuration information for a service.
        qdescription----Queries the description for a service.
        qfailure--------Queries the actions taken by a service upon failure.
        delete----------Deletes a service (from the registry).
        create----------Creates a service. (adds it to the registry).
        control---------Sends a control to a service.
        sdshow----------Displays a service's security descriptor.
        sdset-----------Sets a service's security descriptor.
        GetDisplayName--Gets the DisplayName for a service.
        GetKeyName------Gets the ServiceKeyName for a service.
        EnumDepend------Enumerates Service Dependencies.

      The following commands don't require a service name:
      sc <server> <command> <option>
        boot------------(ok | bad) Indicates whether the last boot should
                        be saved as the last-known-good boot configuration
        Lock------------Locks the Service Database
        QueryLock-------Queries the LockStatus for the SCManager Database
  EXAMPLE:
          sc start MyService

answered Sep 25, 2008 at 15:15

Ferruccio's user avatar

FerruccioFerruccio

98.1k38 gold badges227 silver badges298 bronze badges

4

net start [serviceName]

and

net stop [serviceName]

tell you whether they have succeeded or failed pretty clearly. For example

U:>net stop alerter
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

If running from a batch file, you have access to the ERRORLEVEL of the return code. 0 indicates success. Anything higher indicates failure.

As a bat file, error.bat:

@echo off
net stop alerter
if ERRORLEVEL 1 goto error
exit
:error
echo There was a problem
pause

The output looks like this:

U:>error.bat
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

There was a problem
Press any key to continue . . .

Return Codes

 - 0 = Success
 - 1 = Not Supported
 - 2 = Access Denied
 - 3 = Dependent Services Running
 - 4 = Invalid Service Control
 - 5 = Service Cannot Accept Control
 - 6 = Service Not Active
 - 7 = Service Request Timeout
 - 8 = Unknown Failure
 - 9 = Path Not Found
 - 10 = Service Already Running
 - 11 = Service Database Locked
 - 12 = Service Dependency Deleted
 - 13 = Service Dependency Failure
 - 14 = Service Disabled
 - 15 = Service Logon Failure
 - 16 = Service Marked For Deletion
 - 17 = Service No Thread
 - 18 = Status Circular Dependency
 - 19 = Status Duplicate Name
 - 20 = Status Invalid Name
 - 21 = Status Invalid Parameter 
 - 22 = Status Invalid Service Account
 - 23 = Status Service Exists
 - 24 = Service Already Paused

Edit 20.04.2015

Return Codes:

The NET command does not return the documented Win32_Service class return codes (Service Not Active,Service Request Timeout, etc) and for many errors will simply return Errorlevel 2.

Look here: http://ss64.com/nt/net_service.html

Martin R.'s user avatar

answered Sep 25, 2008 at 15:13

Bill Michell's user avatar

Bill MichellBill Michell

8,1603 gold badges28 silver badges33 bronze badges

3

You can use the NET START command and then check the ERRORLEVEL environment variable, e.g.

net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%

Disclaimer: I’ve written this from the top of my head, but I think it’ll work.

answered Sep 25, 2008 at 15:15

Jonas Engström's user avatar

Jonas EngströmJonas Engström

4,9753 gold badges37 silver badges36 bronze badges

0

I have created my personal batch file for this, mine is a little different but feel free to modify as you see fit.
I created this a little while ago because I was bored and wanted to make a simple way for people to be able to input ending, starting, stopping, or setting to auto. This BAT file simply requests that you input the service name and it will do the rest for you. I didn’t realize that he was looking for something that stated any error, I must have misread that part. Though typically this can be done by inputting >> output.txt on the end of the line.

The %var% is just a way for the user to be able to input their own service into this, instead of having to go modify the bat file every time that you want to start/stop a different service.

If I am wrong, anyone can feel free to correct me on this.

@echo off
set /p c= Would you like to start a service [Y/N]?
  if /I "%c%" EQU "Y" goto :1
  if /I "%c%" EQU "N" goto :2
    :1  
    set /p var= Service name: 
:2 
set /p c= Would you like to stop a service [Y/N]?
  if /I "%c%" EQU "Y" goto :3
  if /I "%c%" EQU "N" goto :4
    :3  
    set /p var1= Service name:
:4
set /p c= Would you like to disable a service [Y/N]?
  if /I "%c%" EQU "Y" goto :5
  if /I "%c%" EQU "N" goto :6
    :5  
    set /p var2= Service name:
:6 
set /p c= Would you like to set a service to auto [Y/N]?
  if /I "%c%" EQU "Y" goto :7
  if /I "%c%" EQU "N" goto :10
    :7  
    set /p var3= Service name:
:10
sc start %var%
sc stop %var1%
sc config %var2% start=disabled
sc config %var3% start=auto

answered Jun 13, 2015 at 1:31

Nathanial Wilson's user avatar

2

Instead of checking codes, this works too

net start "Apache tomcat" || goto ExitError

:End  
exit 0  

:ExitError  
echo An error has occurred while starting the tomcat services  
exit 1  

Mr_Green's user avatar

Mr_Green

40.3k43 gold badges159 silver badges266 bronze badges

answered Dec 7, 2013 at 16:45

vanval's user avatar

vanvalvanval

9871 gold badge9 silver badges18 bronze badges

Using the return codes from net start and net stop seems like the best method to me. Try a look at this: Net Start return codes.

bluish's user avatar

bluish

25.8k27 gold badges119 silver badges178 bronze badges

answered Sep 25, 2008 at 15:12

ZombieSheep's user avatar

ZombieSheepZombieSheep

29.5k12 gold badges66 silver badges114 bronze badges

1

Syntax always gets me…. so…

Here is explicitly how to add a line to a batch file that will kill a remote service (on another machine) if you are an admin on both machines, run the .bat as an administrator, and the machines are on the same domain. The machine name follows the UNC format myserver

sc \ip.ip.ip.ip stop p4_1

In this case… p4_1 was both the Service Name and the Display Name, when you view the Properties for the service in Service Manager. You must use the Service Name.

For your Service Ops junkies… be sure to append your reason code and comment! i.e. ‘4’ which equals ‘Planned’ and comment ‘Stopping server for maintenance’

sc \ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance

answered Jan 28, 2014 at 20:52

ATSiem's user avatar

ATSiemATSiem

1,19412 silver badges19 bronze badges

2

We’d like to think that «net stop » will stop the service. Sadly, reality isn’t that black and white. If the service takes a long time to stop, the command will return before the service has stopped. You won’t know, though, unless you check errorlevel.

The solution seems to be to loop round looking for the state of the service until it is stopped, with a pause each time round the loop.

But then again…

I’m seeing the first service take a long time to stop, then the «net stop» for a subsequent service just appears to do nothing. Look at the service in the services manager, and its state is still «Started» — no change to «Stopping». Yet I can stop this second service manually using the SCM, and it stops in 3 or 4 seconds.

answered Feb 10, 2014 at 17:04

DaveH's user avatar

DaveHDaveH

511 silver badge1 bronze badge

or you can start remote service with this cmd : sc \<computer> start <service>

answered Jan 27, 2012 at 8:56

onionpsy's user avatar

onionpsyonionpsy

1,49111 silver badges15 bronze badges

I just used Jonas’ example above and created full list of 0 to 24 errorlevels. Other post is correct that net start and net stop only use errorlevel 0 for success and 2 for failure.

But this is what worked for me:

net stop postgresql-9.1
if %errorlevel% == 2 echo Access Denied - Could not stop service
if %errorlevel% == 0 echo Service stopped successfully
echo Errorlevel: %errorlevel%

Change stop to start and works in reverse.

answered Feb 12, 2016 at 16:33

Clinton's user avatar

Manual service restart is ok — services.msc has «Restart» button, but in command line both sc and net commands lacks a «restart» switch and if restart is scheduled in cmd/bat file, service is stopped and started immediately, sometimes it gets an error because service is not stopped yet, it needs some time to shut things down.

This may generate an error:
sc stop
sc start

It is a good idea to insert timeout, I use ping (it pings every 1 second):
sc stop
ping localhost -n 60
sc start

answered May 24, 2016 at 8:55

Kuleris's user avatar

KulerisKuleris

1011 silver badge3 bronze badges

Here is the Windows 10 command to start System Restore using batch :

sc config swprv start= Auto

You may also like those commands :

  • Change registry value to auto start System restore

    REG ADD «HKLMSOFTWAREMicrosoftWindows NTCurrentVersionSystemRestore» /v DisableSR /t REG_DWORD /d 0 /f

  • Create a system restore point

    Wmic.exe /Namespace:rootdefault Path SystemRestore Call CreateRestorePoint «djibe saved your PC», 100, 12

  • Change System Restore disk usage

    vssadmin resize shadowstorage /for=C: /on=C: /maxsize=10%

Enjoy

answered Nov 26, 2018 at 19:53

djibe's user avatar

djibedjibe

2,7442 gold badges15 silver badges24 bronze badges

SC can do everything with services… start, stop, check, configure, and more…

bluish's user avatar

bluish

25.8k27 gold badges119 silver badges178 bronze badges

answered Sep 25, 2008 at 15:26

Axeman's user avatar

AxemanAxeman

3491 silver badge7 bronze badges

Sometimes you can find the stop does not work..

My SQlServer sometimes does this. Using the following commandline kills it. If you really really need your script to kill stuff that doesn’t stop. I would have it do this as a last resort

taskkill /pid [pid number] /f

answered May 9, 2018 at 9:52

andrew pate's user avatar

andrew pateandrew pate

3,70734 silver badges26 bronze badges

  1. SC
  2. NET STOP/START
  3. PsService
  4. WMIC
  5. Powershell is also easy for use option

SC and NET are already given as an anwests. PsService add some neat features but requires a download from Microsoft.

But my favorite way is with WMIC as the WQL syntax gives a powerful way to manage more than one service with one line (WMI objects can be also used through powershell/vbscript/jscript/c#).

The easiest way to use it:

wmic service MyService call StartService
wmic service MyService  call StopService

And example with WQL

wmic service where "name like '%%32Time%%' and ErrorControl='Normal'" call StartService

This will start all services that have a name containing 32Time and have normal error control.

Here are the methods you can use.

With :

wmic service get /FORMAT:VALUE

you can see the available information about the services.

answered Nov 5, 2020 at 16:15

npocmaka's user avatar

npocmakanpocmaka

54.7k18 gold badges148 silver badges184 bronze badges

I am writing a windows service in C#, the stop/uninstall/build/install/start loop got too tiring. Wrote a mini script, called it reploy.bat and dropped in my Visual Studio output directory (one that has the built service executable) to automate the loop.

Just set these 3 vars

servicename : this shows up on the Windows Service control panel (services.msc)

slndir : folder (not the full path) containing your solution (.sln) file

binpath : full path (not the folder path) to the service executable from the build

NOTE: This needs to be run from the Visual Studio Developer Command Line for the msbuild command to work.

SET servicename="My Amazing Service"
SET slndir="C:dirthatcontainsslnfile"
SET binpath="C:pathtoservice.exe"
SET currdir=%cd%

call net stop %servicename%
call sc delete %servicename%
cd %slndir%
call msbuild 
cd %bindir%
call sc create %servicename% binpath=%binpath%
call net start %servicename%
cd %currdir%

Maybe this helps someone :)

answered Oct 5, 2018 at 18:53

sh87's user avatar

sh87sh87

1,01310 silver badges12 bronze badges

1

I didn’t find any of the answers above to offer a satisfactory solution so I wrote the following batch script…

:loop
net stop tomcat8 
sc query tomcat8 | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)
:loop2
net start tomcat8
sc query tomcat8 | find "RUNNING"
if errorlevel 1 (
  timeout 1
  goto loop2
)

It keeps running net stop until the service status is STOPPED, only after the status is stopped does it run net start. If a service takes a long time to stop, net stop can terminate unsuccessfully. If for some reason the service does not start successfully, it will keep attempting to start the service until the state is RUNNING.

answered Nov 25, 2021 at 2:59

Mick's user avatar

MickMick

6,3994 gold badges48 silver badges67 bronze badges

With this can start a service or program that need a service

@echo
taskkill /im service.exe /f
taskkill /im service.exe /f
set "reply=y"
set /p "reply=Restart service? [y|n]: "
if /i not "%reply%" == "y" goto :eof
cd "C:UsersuserDesktop"
start service.lnk
sc start service
eof
exit

answered Mar 10, 2022 at 17:46

jlberlanga's user avatar

Сделай сам

Блог о самоделках, поделках, программировании на ява скрипте и iMacros, написании собственных программ, и заработку в интернете. А так же некоторые тонкости и настройки броузера Mozilla и других программ.

Остановка запуск служб BAT файлом, Отключение служб включение служб BAT файлом, добавление в реестр BAT файлом, остановка служб BAT файлом

Поскольку у меня сейчас стоит виндовс 10, а она конфликтует на моем ноутбуке с драйвером видеокарты gf 410m и компьютер после установки драйвера кирпичится, а так же Бесконечное завершение работы и бесконечная перезагрузка из за установленного приложения от Мегафона юсб 4ж модема, а точнее конфликт происходит конкретно из за службы Megafon Internet Sevice, то мне как раз таки и понадобится Отключение служб включение служб BAT файлом, добавление в реестр BAT файлом, остановка служб BAT файлом.

То есть когда мне понадобится приложение Мегафон интернет, то я могу запустить его прямо из папки с программой (само приложение деинсталлировано из системы), которая требует запуска службы Megafon Internet Sevice и при нажатии на кнопку Запустить службу — приложение запускает эту службу. Но вот проблема — запустить запускает, а завершить — нет. То есть служба постоянно висит в системе при включении и выключении компьютера. А поскольку виндовс 10 конфликтует с этой службой, то ее необходимо завершить и отключить, чтобы при завершении работы виндовс 10 не пошло Бесконечное завершение работы (приходится вырубать топором — удерживать кнопку питания) или Бесконечная перезагрузка виндовс 10 (если отправили комп на перезагрузку). Так вот чтобы этого не было — службу необходимо отключать до Завершения работы виндовс 10. Еще раз — поэтому мне и нужно отключение служб включение служб BAT файлом, добавление в реестр BAT файлом, остановка служб BAT файлом.

Итак, как ОСТАНОВИТЬ службу Megafon Internet Sevice с помощью бат файла
И отключить службу в реестре, чтобы при перезапуске она снова не запускалась. Для этого я сделал BAT файл и добавил туда 2-3 строки, 1я из которых останавливает службу, а 2я отключает ее в реестре.

NET STOP «MegaFon Internet Service»
reg add «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMegaFon Internet Service» /v Start /t REG_DWORD /d 4 /f
pause

А для запуска службы нужно использовать следующее:
NET START «MegaFon Internet Service»

Таким образом, когда я запускаю когда мне нужно мегафон приложение, то после использования его делаю запуск бат-файла — который останавливает служба и отключает ее и ноутбук работает без глюков — то есть штатное Завершение работы работает корректно.

Как написать батник для перезапуска службы

Работая с некоторыми программами, приходится вручную включать или отключать определенные службы. Например, если вы не хотите, чтобы фоновый процесс того или иного приложения не был запущен — вы его отключаете. Но когда это делается регулярно, не очень удобно каждый раз заходить в «Службы» операционной системы Windows 10 и Windows 11, искать ее в большом списке и вручную останавливать. В этой статье мы покажем, как создать скрип и как можно запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Процесс не сложный и не нуждается в знаниях программирования. А для выполнения, нужно запустить текстовый редактор и прописать команду. Чтобы успешно создать такой bat-файл, внимательно следуйте нижеприведенной инструкции:

  1. запустите компонент «Службы» и откройте нужный для вас процесс (для примера мы выбрали фоновый процесс Hamachi)
  2. в графе «Имя службы», скопируйте название (в нашем случае это — Hamachi2Svc)

Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Созданный ярлык вы можете разместить в любое удобное место. Только будьте внимательны, чтобы не удалить основной bat-файл. Его расположение не должно изменяться после создания ярлыка. Теперь, для запуска или остановки нужной для вас службы — запустите ярлык и подтвердите запуск с правами администратора.

Надеемся, что данная инструкция помогла вам облегчить процесс отключения и включения служб в операционных системах Windows 10 и Windows 11. Другие статьи об использовании системы Windows вы найдете на нашем сайте в одноименном разделе

Остановить и запустить службу через пакетный или cmd-файл?

Как я могу написать bat или cmd, чтобы остановить и запустить службу надежно с проверкой ошибок (или дайте мне знать, что она не была успешной по какой-либо причине)?

14 ответов

использовать SC (service control) команда, это дает вам гораздо больше возможностей, чем просто start & stop .

скажите вам, преуспели они или потерпели неудачу довольно ясно. Например

при запуске из пакетного файла у вас есть доступ к уровню ошибок кода возврата. 0 указывает на успех. Все, что выше указывает на ошибку.

как файл bat, error.bat :

вывод выглядит следующим образом:

Коды Возврата

изменить 20.04.2015

команда NET не возвращает задокументированные коды возврата класса Win32_Service (служба не активна,время ожидания запроса на обслуживание и т. д.), и для многих ошибок просто вернет Errorlevel 2.

вы можете использовать команду NET START, а затем проверить переменную среды ERRORLEVEL, например

отказ от ответственности: я написал это с головы, но я думаю, что это сработает.

вместо проверки кодов это тоже работает

Я создал свой личный пакетный файл для этого, мой немного отличается, но не стесняйтесь изменять, как вы считаете нужным.

Я создал это некоторое время назад, потому что мне было скучно и я хотел сделать простой способ для людей, чтобы иметь возможность ввода конец, начиная с, остановка или установка в auto. Этот файл BAT просто запрашивает, чтобы вы ввели имя службы, и он сделает все остальное за вас. Я не знала, что он был ища что-то, что указывало на любую ошибку, я, должно быть, неправильно истолковал эту часть. Хотя обычно это можно сделать, введя >> output.txt в конце строки.

на %var% это просто способ для пользователя, чтобы иметь возможность ввести свой собственный сервис в это, вместо того, чтобы идти изменить файл bat каждый раз, когда вы хотите, чтобы начать/остановить другую службу.

Если я ошибаюсь, любой может исправить меня в этом.

использование кодов возврата от net start и net stop Кажется мне лучшим методом. Попробуйте взглянуть на это:Net Start коды возврата.

Подробности

Создано: 20 сентября 2021

Работая с некоторыми программами, приходится вручную включать или отключать определенные службы. Например, если вы не хотите, чтобы фоновый процесс того или иного приложения не был запущен — вы его отключаете. Но когда это делается регулярно, не очень удобно каждый раз заходить в «Службы» операционной системы Windows 10 и Windows 11, искать ее в большом списке и вручную останавливать. В этой статье мы покажем, как создать скрип и как можно запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Процесс не сложный и не нуждается в знаниях программирования. А для выполнения, нужно запустить текстовый редактор и прописать команду. Чтобы успешно создать такой bat-файл, внимательно следуйте нижеприведенной инструкции:

  1. запустите компонент «Службы» и откройте нужный для вас процесс (для примера мы выбрали фоновый процесс Hamachi)
  2. в графе «Имя службы», скопируйте название (в нашем случае это — Hamachi2Svc)

    Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

  3. создайте текстовый файл в любом удобном для вас месте и откройте его

    Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

  4. пропишите команду: net stop (для остановки) или net start (для запуска)
    Примечание: обратите внимание, что для выполнения каждой команды нужно создавать отдельный файл
  5. после команды, через пробел, вставьте название службы. У вас должно получиться примерно как на скриншоте ниже:

    Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

  6. сохраните текстовый документ
  7. переименуйте расширение документа на .bat (в этой статье описано как включить расширения файлов)

    Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

  8. создайте ярлык для этого BAT-файла (например, нажав на правую клавишу и выбрав «Отправить» — «Рабочий стол — создать ярлык»)
  9. откройте «Свойства» свежесозданного ярлыка и нажмите на кнопку «Дополнительно«
  10. поставьте птичку возле «Запускать от имени администратора«
  11. Нажмите кнопку «ОК»

    Как запустить и остановить службу Windows с помощью ярлыка BAT-файла?

Созданный ярлык вы можете разместить в любое удобное место. Только будьте внимательны, чтобы не удалить основной bat-файл. Его расположение не должно изменяться после создания ярлыка. Теперь, для запуска или остановки нужной для вас службы — запустите ярлык и подтвердите запуск с правами администратора.

Надеемся, что данная инструкция помогла вам облегчить процесс отключения и включения служб в операционных системах Windows 10 и Windows 11. Другие статьи об использовании системы Windows вы найдете на нашем сайте в одноименном разделе

Для работы со службами в Windows, существует утилита командной строки sc, также для управления можно использовать утилиту net. В данной стать я не буду пытаться описать все их параметры. Цель статьи — показать как со службами производить основные действия: установка, удаление, запуск, остановка.

Создание (установка, инсталляция) службы:

 

sc [computername] create [newservice] binpath= [путь к exe-файлу приложения] <параметры>
где:
 [computername] имя компьютера на котором устанавливается служба (для локального этот параметр можно опустить)
[newservice] — имя вашей службы
[путь к exe-файлу приложения] — полный путь  к вашей программе. 
<параметры>  — дополнительные параметры. Необязательны. Т.к. в мой пост не ставит целью дать доскональное описание этой утилиты, о параметрах вы можете почитать например здесь.
Обратите внимание на пробел после binpath, он обязательный! 
Кстати, если в пути есть пробелы, то его следует заключить в кавычки » «. Если есть русские буквы, то, возможно потребуется решить проблемы с кодировкой (аналогично описаному здесь). В Windows 7, команду надо выполнять от имени администратора. И самое главное: не каждая программа может быть службой! Она должна быть написана соответствующим образом для этого!

 Удаление службы:

 

 sc [computername] delete [servicename]

 Параметры  аналогичны установке.

Запуск службы: 

 

с помощью утилиты net:

net start [servicename]

где [servicename] — имя службы

с помощью утилиты sc:

sc start [servicename]

где [servicename] — имя службы

Остановка службы: 

 

с помощью утилиты net:

net stop [servicename]

где [servicename] — имя службы

с помощью утилиты sc:

sc stop [servicename]

где [servicename] — имя службы

Разница в том, что эти 2 утилиты работают с разными именами: sc — с системным именем, а net с отображаемым (параметр displayname при создании с помощью cs)

Пример:

 

chcp 1251
sc create NewServ binpath= «d:Мой сервисService.exe» displayname= MyServ

Данный bat-файл создаст службу NewServ с отображаемым именем «MyServ». Первая строчка указывает консоли кодировку, т.к. bat был написан в блокноте, который сохраняет файлы в ANSI (windows 1251), а по умолчанию консоль работает (оем 866)

sc start NewServ 

Данная команда запустит службу, обратите внимание что мы обращаемся к ней по системному имени. 

 net start MyServ 

Как уже говорилось выше, службу можно запустить и так, но использовать надо не системное, а отображаемое имя!

Аналогично остановка службы:

или

net stop MyServ 

Удаление:

Slom

0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

1

Прошу подсказать с настройкой батника для проверки и запуска службы

10.03.2021, 12:04. Показов 4002. Ответов 64

Метки нет (Все метки)


Добрый день,прошу подсказать правильное написание батника.(код ниже) Тот,что есть срабатывает один раз,чекает состояние службы и если она остановлена ,то запускает ее.НО мне хотелось бы понять, как сделать чтоб батник постоянно чекал состояние службы и запускал ее в случае остановки (я только начал заниматься писанием batch-файла (3 дня читаю и пытаюсь сделать батник) ,может и видел правильные ответы,хотя скрупулезно искал данные,но может как в той шутке «смотрел в книгу,видел фигу»). Так же вопрос как создать конфигурационный файл для батника,если например нужно чекать раз в час и запускать.

Заранее спасибо,надеюсь на ваши подсказки и советы,реально интересно заниматься этим,да и решил что пригодится ,но когда,кажется,все варианты посмотрел решил напрямую написать на форуме.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Echo On
title TEST ROUTER
Set ServiceName=ROUTER
 
MOVE проверка и запуск 3.bat>>log.txt echo %date%; %time:~0,-3%; %%~fi; Successfully || 1>>log.txt echo %date%; %time:~0,-3%; %%~fi; failure
 
:: Получаем состояние службы, проверяем запущена ли она
SC queryex %ServiceName%|Find "STATE"|Find "RUNNING">Nul&&(
    rem Пробуем остановить
    Net stop %ServiceName%>nul||(
        rem Если остановить через net stop не вышло, запрашиваем PID
        For /F "tokens=3" %%A In ('SC queryex %ServiceName%^|Find "PID"') Do (
            rem Убиваем процесс вместе с дочерними, используя полученный PID
            TaskKill /F /T /PID %%A>nul
            rem Задержка, чтобы обновился статус службы после убийства процесса
            Ping -n 4 127.0.0.1>nul
        )
        rem еще раз
        Net stop %ServiceName% 2>nul
    )
)
rem Если служба не была запущена, или уже убита к тому времени - запускаем её
Net start %ServiceName%
pause

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 12:15

2

Slom, добрый! Самым правильным будет настроить в планировщике запуск скрипта, который поднимет службу по событию (остановка службы). В Вашем случае можете текущий скрипт запихнуть так же в планировщик и в качестве триггера указать периодичность запуска (тот же час)



0



0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 13:21

 [ТС]

3

Karen87, да,это был запасной вариант,но думал это все одним батником делать,так как если у тебя несколько мест где это решение нужно использовать ,то везде нужно планировщик настраивать.
еще вопрос,создаю лог,но он при успешном запуске пишет 10.03.2021; 15:38:55; %~fi; failure.

Что не правильно написал? хотел бы чтоб успешно и ошибку выдавало при запуске,но если при этом служба раннинг
MOVE проверка и запуск 3.bat>>log.txt echo %date%; %time:~0,-3%; %%~fi; Successfully || 1>>log.txt echo %date%; %time:~0,-3%; %%~fi; failure



0



Karen87

2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 14:51

4

Цитата
Сообщение от Slom
Посмотреть сообщение

мне хотелось бы понять, как сделать чтоб батник постоянно чекал состояние службы и запускал ее в случае остановки (я только начал заниматься писанием batch-файла (3 дня читаю и пытаюсь сделать батник) ,может и видел правильные ответы,хотя скрупулезно искал данные,но может как в той шутке «смотрел в книгу,видел фигу»). Так же вопрос как создать конфигурационный файл для батника,если например нужно чекать раз в час и запускать.

Примерно так:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
title TEST ROUTER
setlocal enableextensions enabledelayedexpansion
:process
if not defined period (
    set /p "period=Укажите периодичность проверки в часах: "
)
Set "ServiceName=ROUTER"
for /f "tokens=* delims=" %%a in ('powershell -executionpolicy bypass -command "(Get-Service %ServiceName%).Status"') do (
    if /i "%%a"=="Stopped" (
        net start %ServiceName%
    )
)
set /A waiting=!period!*3600
ping localhost -n %waiting%>nul
goto process

Можно и логирование прикрутить. Что хотите видеть в логе и в каком виде он должен быть?



0



0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 15:33

 [ТС]

5

Karen87, спасибо.

Правильно я понимаю команда goto process ,по сути, оставляет батник работающим?
второй вопрос: Если мне не нужна проверка каждый час ,а только тогда когда остановилась служба сразу ее запускать, то мне нужно заремить(rem) следующие строчки:

5 if not defined period (
6 set /p «period=Укажите периодичность проверки в часах: «

14 set /A waiting=!period!*3600

насчет логов:

10.03.2021; 15:38:55; служба остановлена.
10.03.2021; 15:38:57; служба запущена, после остановки

чтоб понимать когда стоп и старт службы был. Заранее благодарю.



0



2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 15:37

6

Цитата
Сообщение от Slom
Посмотреть сообщение

Правильно я понимаю команда goto process ,по сути, оставляет батник работающим?

Да, происходит переход в начало, то есть цикличная работа скрипта

Цитата
Сообщение от Slom
Посмотреть сообщение

второй вопрос: Если мне не нужна проверка каждый час ,а только тогда когда остановилась служба сразу ее запускать, то мне нужно заремить(rem) следующие строчки:

А как Вы поймёте, что она остановилась? Вам же периодически нужно запрашивать её статус? Руками будете открывать скрипт?

Цитата
Сообщение от Slom
Посмотреть сообщение

насчет логов:
10.03.2021; 15:38:55; служба остановлена.
10.03.2021; 15:38:57; служба запущена, после остановки

Оповещать нужно в самом скрипте или делать вывод во внешний файл?



0



0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 15:42

 [ТС]

7

Цитата
Сообщение от Karen87
Посмотреть сообщение

Да, происходит переход в начало, то есть цикличная работа скрипта

спасибо,за пояснение.

Цитата
Сообщение от Karen87
Посмотреть сообщение

А как Вы поймёте, что она остановилась? Вам же периодически нужно запрашивать её статус? Руками будете открывать скрипт?

Проверкой состояния службы ,или я не прав и так не совсем правильно?
SC queryex %ServiceName%|Find «STATE»|Find «RUNNING»>Nul&&(

Цитата
Сообщение от Karen87
Посмотреть сообщение

Оповещать нужно в самом скрипте или делать вывод во внешний файл?

Внешний лог файл



0



2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 15:46

8

Цитата
Сообщение от Slom
Посмотреть сообщение

Проверкой состояния службы ,или я не прав и так не совсем правильно?
SC queryex %ServiceName%|Find «STATE»|Find «RUNNING»>Nul&&(

Вы не совсем корректно доносите желаемое либо я не совсем корректно понимаю. Что хотите от скрипта получить? Периодическую проверку статуса служба при постоянно запущенном мониторинге или единоразово запустить скрипт и если он обнаружит, что служба остановлена запускать её?

Цитата
Сообщение от Slom
Посмотреть сообщение

Внешний лог файл

Ок, реализую после уточнения предыдущего момента

Добавлено через 15 секунд

Цитата
Сообщение от Slom
Посмотреть сообщение

спасибо,за пояснение.

Пожалуйста



0



0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 16:04

 [ТС]

9

Цитата
Сообщение от Karen87
Посмотреть сообщение

Вы не совсем корректно доносите желаемое либо я не совсем корректно понимаю. Что хотите от скрипта получить? Периодическую проверку статуса служба при постоянно запущенном мониторинге или единоразово запустить скрипт и если он обнаружит, что служба остановлена запускать её?

я понял,попробую пояснить.

В Вашей версии батника , батник будет запускаться каждый час, если служба остановлена.(если я не правильно что-то понял, то прошу меня поправить)
Так же я уточнил, как можно реализовать ,чтоб батник чекал состояние службы и если она остановлена ,то запускал бы ее. И в данной ситуации я спросил у Вас про то, что: если мне дополнительно не нужно будет чекать каждый час службу(я могу ее заремить?), но при этом чекать статус «стоп»,и чтоб батник запустил службу сам.



0



2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 16:08

10

Цитата
Сообщение от Slom
Посмотреть сообщение

В Вашей версии батника , батник будет запускаться каждый час, если служба остановлена.(если я не правильно что-то понял, то прошу меня поправить)

Не совсем так. Батник проверяет службу и в зависимости от её статуса либо ничего не делает (если служба запущена), либо запускает её (если служба остановлена). Затем идёт ожидание в рамках временного интервала, который задаётся в начале скрипта. То есть, допустим, через час он снова проверяет статус службы и т.д.
В связи с этим я и спрашиваю каким образом проверять статус службы будете? Руками запускать скрипт?



0



0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 16:30

 [ТС]

11

Ручками,смысл скрипта теряется. Понял,я ошибочно думал, что можно это сделать как то онлайн ,что скрипт должен постоянно чекать службу,но по сути тут реализовано как Вы написали, только можно поставить каждые 5 минут например. Моя ошибка, не совсем осмыслил весь технический момент батника.



0



Karen87

2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 16:36

12

Лучший ответ Сообщение было отмечено Slom как решение

Решение

С логированием и промежутком в 5 минут:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
setlocal enableextensions enabledelayedexpansion
title TEST ROUTER
:process
Set "ServiceName=ROUTER"
for /f "tokens=* delims=" %%a in ('powershell -executionpolicy bypass -command "(Get-Service %ServiceName%).Status"') do (
    if /i "%%a"=="Stopped" (
        echo !date!; !time:~,-3! служба остановлена>>log.txt
        net start %ServiceName%
        echo !date!; !time:~,-3! служба запущена>>log.txt
    )
)
ping localhost -n 300>nul
goto process



1



Slom

0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 17:02

 [ТС]

13

Гигантское Вам спасибо за помощь! И за терпение!

Немножко поправил батник (совместил Ваши версии):

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
chcp 1251
title TEST ROUTER
setlocal enableextensions enabledelayedexpansion
:process
if not defined period (
    set /p "period=Укажите периодичность проверки в минутах: "
)
Set "ServiceName=iQ-ROUTER"
for /f "tokens=* delims=" %%a in ('powershell -executionpolicy bypass -command "(Get-Service %ServiceName%).Status"') do (
    if /i "%%a"=="Stopped" (
    echo !date!; !time:~,-3! служба остановлена>>log.txt
    net start %ServiceName%
    echo !date!; !time:~,-3! служба запущена>>log.txt
    )
)
set /A waiting=!period!*60
ping localhost -n %waiting%>nul
goto process

один вопрос остался: лог не пишется почему то?с чем может быть это связано, так же как его спрятать после запуска?



0



2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 17:08

14

Цитата
Сообщение от Slom
Посмотреть сообщение

один вопрос остался: лог не пишется почему то?

Уверены? Должен формироваться файл log.txt рядом со скриптом

Цитата
Сообщение от Slom
Посмотреть сообщение

так же как его спрятать после запуска?

Для этого допутилита нужна будет. Не смущает?



0



0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 17:38

 [ТС]

15

Цитата
Сообщение от Karen87
Посмотреть сообщение

Уверены? Должен формироваться файл log.txt рядом со скриптом

перепроверил,все ок.сорри.

Цитата
Сообщение от Karen87
Посмотреть сообщение

Для этого допутилита нужна будет. Не смущает?

вроде нет.

еще ,если позволите,вопрос.Для того ,чтоб после перезагрузки компьютера батник заработал лучше в автозагрузки его поставить или перевести батник в exe и так же в автозагрузки?



0



2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 17:52

16

Slom, в автозагрузку просто кидаете. Скрытое выполнение попозже допишу



0



Karen87

2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 18:52

17

Скрытое выполнение:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cmdow @ /HID
chcp 1251
title TEST ROUTER
setlocal enableextensions enabledelayedexpansion
:process
if not defined period (
    set /p "period=Укажите периодичность проверки в минутах: "
)
Set "ServiceName=iQ-ROUTER"
for /f "tokens=* delims=" %%a in ('powershell -executionpolicy bypass -command "(Get-Service %ServiceName%).Status"') do (
    if /i "%%a"=="Stopped" (
    echo !date!; !time:~,-3! служба остановлена>>log.txt
    net start %ServiceName%
    echo !date!; !time:~,-3! служба запущена>>log.txt
    )
)
set /A waiting=!period!*60
ping localhost -n %waiting%>nul
goto process

Примечание.
Утилиту во вложении распакуйте и скопируйте в C:windowssystem32

Вложения

Тип файла: zip cmdow.zip (36.6 Кб, 3 просмотров)



0



Karen87

2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 19:28

18

Я бы совместил 13 и 14 строчки в одну, кстати:

Windows Batch file
1
net start %ServiceName% && echo !date!; !time:~,-3! служба запущена>>log.txt

В этом случае событие запуска службы в лог будет добавлено только в случае её успешного запуска



0



0 / 0 / 0

Регистрация: 10.03.2021

Сообщений: 32

10.03.2021, 19:40

 [ТС]

19

Karen87,

распаковал cmdow в C:windowssystem32, батник спрятался,но при этом не произошло запуска службы и не пишутся логи+не дает выставить количество минут



0



2403 / 965 / 442

Регистрация: 29.05.2016

Сообщений: 4,209

10.03.2021, 19:43

20

А, точно… Я и забыл про счетчик, тогда давайте думать каким образом будете выставлять периодичность проверки?



0





Как я могу написать сценарий bat или cmd, чтобы остановить и запустить службу надежно с проверкой ошибок (или дайте мне знать, что это не было успешным по какой-либо причине)?


799  


14  

14 ответов:

использовать SC (service control) команда, это дает вам гораздо больше возможностей, чем просто start & stop.

  DESCRIPTION:
          SC is a command line program used for communicating with the
          NT Service Controller and services.
  USAGE:
      sc <server> [command] [service name]  ...

      The option <server> has the form "ServerName"
      Further help on commands can be obtained by typing: "sc [command]"
      Commands:
        query-----------Queries the status for a service, or
                        enumerates the status for types of services.
        queryex---------Queries the extended status for a service, or
                        enumerates the status for types of services.
        start-----------Starts a service.
        pause-----------Sends a PAUSE control request to a service.
        interrogate-----Sends an INTERROGATE control request to a service.
        continue--------Sends a CONTINUE control request to a service.
        stop------------Sends a STOP request to a service.
        config----------Changes the configuration of a service (persistant).
        description-----Changes the description of a service.
        failure---------Changes the actions taken by a service upon failure.
        qc--------------Queries the configuration information for a service.
        qdescription----Queries the description for a service.
        qfailure--------Queries the actions taken by a service upon failure.
        delete----------Deletes a service (from the registry).
        create----------Creates a service. (adds it to the registry).
        control---------Sends a control to a service.
        sdshow----------Displays a service's security descriptor.
        sdset-----------Sets a service's security descriptor.
        GetDisplayName--Gets the DisplayName for a service.
        GetKeyName------Gets the ServiceKeyName for a service.
        EnumDepend------Enumerates Service Dependencies.

      The following commands don't require a service name:
      sc <server> <command> <option>
        boot------------(ok | bad) Indicates whether the last boot should
                        be saved as the last-known-good boot configuration
        Lock------------Locks the Service Database
        QueryLock-------Queries the LockStatus for the SCManager Database
  EXAMPLE:
          sc start MyService
net start [serviceName]

и

net stop [serviceName]

скажите вам, преуспели ли они или потерпели неудачу довольно ясно. Например

U:>net stop alerter
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

при запуске из пакетного файла, у вас есть доступ к ERRORLEVEL кода возврата. 0 указывает на успех. Все, что выше указывает на ошибку.

как bat-файл, error.bat:

@echo off
net stop alerter
if ERRORLEVEL 1 goto error
exit
:error
echo There was a problem
pause

вывод выглядит так:

U:>error.bat
The Alerter service is not started.

More help is available by typing NET HELPMSG 3521.

There was a problem
Press any key to continue . . .

Коды Возврата

 - 0 = Success
 - 1 = Not Supported
 - 2 = Access Denied
 - 3 = Dependent Services Running
 - 4 = Invalid Service Control
 - 5 = Service Cannot Accept Control
 - 6 = Service Not Active
 - 7 = Service Request Timeout
 - 8 = Unknown Failure
 - 9 = Path Not Found
 - 10 = Service Already Running
 - 11 = Service Database Locked
 - 12 = Service Dependency Deleted
 - 13 = Service Dependency Failure
 - 14 = Service Disabled
 - 15 = Service Logon Failure
 - 16 = Service Marked For Deletion
 - 17 = Service No Thread
 - 18 = Status Circular Dependency
 - 19 = Status Duplicate Name
 - 20 = Status Invalid Name
 - 21 = Status Invalid Parameter 
 - 22 = Status Invalid Service Account
 - 23 = Status Service Exists
 - 24 = Service Already Paused

изменить 20.04.2015

Коды Возврата:

команда NET не возвращает документированные коды возврата класса Win32_Service (Service not Active,Service Request Timeout и т. д.) и для многих ошибок просто возвращает Errorlevel 2.

смотрите сюда:http://ss64.com/nt/net_service.html

вы можете использовать команду NET START, а затем проверить переменную среды ERRORLEVEL, например

net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%

отказ от ответственности: я написал это с самого начала, но я думаю, что это сработает.

вместо проверки кодов, это тоже работает

net start "Apache tomcat" || goto ExitError

:End  
exit 0  

:ExitError  
echo An error has occurred while starting the tomcat services  
exit 1  

Я создал свой личный пакетный файл для этого, мой немного отличается, но не стесняйтесь изменять, как вы считаете нужным.

Я создал этот некоторое время назад, потому что мне было скучно и хотелось сделать простой способ для людей, чтобы иметь возможность вводить конец,начиная с,остановка или настройка для авто. Этот файл BAT просто запрашивает, чтобы вы ввели имя службы, и он сделает все остальное за вас. Я не понимал, что он был ища что-то, что указывало на какую-либо ошибку, я, должно быть, неправильно понял эту часть. Хотя обычно это можно сделать путем ввода >> output.txt в конце строки.

The %var% это просто способ для пользователя, чтобы иметь возможность ввести свой собственный сервис в этом, вместо того, чтобы идти изменить файл bat каждый раз, когда вы хотите, чтобы запустить/остановить другую службу.

Если я ошибаюсь, любой может чувствовать себя свободно, чтобы исправить меня на этом.

@echo off
set /p c= Would you like to start a service [Y/N]?
  if /I "%c%" EQU "Y" goto :1
  if /I "%c%" EQU "N" goto :2
    :1  
    set /p var= Service name: 
:2 
set /p c= Would you like to stop a service [Y/N]?
  if /I "%c%" EQU "Y" goto :3
  if /I "%c%" EQU "N" goto :4
    :3  
    set /p var1= Service name:
:4
set /p c= Would you like to disable a service [Y/N]?
  if /I "%c%" EQU "Y" goto :5
  if /I "%c%" EQU "N" goto :6
    :5  
    set /p var2= Service name:
:6 
set /p c= Would you like to set a service to auto [Y/N]?
  if /I "%c%" EQU "Y" goto :7
  if /I "%c%" EQU "N" goto :10
    :7  
    set /p var3= Service name:
:10
sc start %var%
sc stop %var1%
sc config %var2% start=disabled
sc config %var3% start=auto

используя коды возврата от net start и net stop Мне кажется, что это лучший метод. Попробуйте взглянуть на это:чистый старт коды возврата.

синтаксис всегда меня достает…. так…

здесь явно показано, как добавить строку в пакетный файл, который убьет удаленную службу (на другой машине) если вы являетесь администратором на обеих машинах, запустите .bat как администратор, и машины находятся в одном домене. Имя машины следует за форматом UNC myserver

sc ip.ip.ip.ip stop p4_1

в этом случае… p4_1 — это имя службы и отображаемое имя при просмотре свойств службы в Диспетчере служб. Вы должны используйте имя службы.

для вашего обслуживания ОПС наркоманов… обязательно добавьте свой код причины и комментарий! т. е. «4», который равен «запланирован» и комментарий «остановка сервера для обслуживания»

sc ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance

мы хотели бы думать, что «чистая остановка» остановит службу. К сожалению, реальность не такая уж черно-белая. Если службе требуется много времени для остановки, команда вернется до остановки службы. Вы не знаете, если вы отметите ошибки.

решение, похоже, заключается в циклическом поиске состояния службы до тех пор, пока оно не будет остановлено, с паузой каждый раз вокруг цикла.

но опять же…

Я вижу впервые служба занимает много времени, чтобы остановиться, а затем «чистая остановка» для последующей службы просто ничего не делает. Посмотрите на службу в диспетчере служб, и ее состояние по — прежнему «запущено» — без изменения на «остановку». Тем не менее, я могу остановить эту вторую службу вручную с помощью SCM, и она останавливается через 3 или 4 секунды.

или вы можете запустить удаленную службу с помощью этого cmd:sc <computer> start <service>

Я просто использовал пример Джонаса выше и создал полный список от 0 до 24 уровней ошибок. Другой пост правильно, что net start и net stop использовать только errorlevel 0 для успеха и 2 отказа.

но это то, что сработало для меня:

net stop postgresql-9.1
if %errorlevel% == 2 echo Access Denied - Could not stop service
if %errorlevel% == 0 echo Service stopped successfully
echo Errorlevel: %errorlevel%

изменить stop до start и работает в обратном направлении.

ручной перезапуск службы-это ok-services.msc имеет кнопку» Перезагрузка», но в командной строке как sc, так и net командам не хватает переключателя» перезагрузка», и если перезапуск запланирован в файле cmd/bat, служба останавливается и запускается немедленно, иногда она получает ошибку, потому что Служба еще не остановлена, ей нужно некоторое время, чтобы закрыть вещи.

Это может привести к ошибке:
СК остановка
sc start

Это хорошая идея, чтобы вставить тайм-аут, я использую пинг (он проверяет каждую 1 секунду):
Южная Каролина остановка
ping localhost-N 60
sc start

SC может сделать все с услугами… запуск, остановка, проверка, настройка и многое другое…

иногда вы можете найти стоп-не работает..

мой SQlServer иногда делает это. С помощью следующей командной строки убивает его. Если вам действительно нужен ваш сценарий, чтобы убить вещи, которые не останавливаются. Я бы сделал это в крайнем случае

taskkill /pid [pid number] /f

Я пишу службу windows на C#, цикл stop/uninstall/build/install/start стал слишком утомительным. Написал мини-скрипт, назвал его reploy.bat и упал в мой выходной каталог Visual Studio (тот, который имеет встроенный исполняемый файл службы) для автоматизации цикла.

просто установите эти 3 Варс

servicename: это отображается на панели управления Windows Service (services.msc)

slndir : папка (не полный путь), содержащая ваше решение (.ФСЛ) файл

binpath: полный путь (не путь к папке) к исполняемому файлу службы из сборки

Примечание: это должно быть запущено из командной строки разработчика Visual Studio для msbuild команда для работы.

SET servicename="My Amazing Service"
SET slndir="C:dirthatcontainsslnfile"
SET binpath="C:pathtoservice.exe"
SET currdir=%cd%

call net stop %servicename%
call sc delete %servicename%
cd %slndir%
call msbuild 
cd %bindir%
call sc create %servicename% binpath=%binpath%
call net start %servicename%
cd %currdir%

может быть, это поможет кому-то :)

Понравилась статья? Поделить с друзьями:
  • Как написать bat скрипты
  • Как написать bat скрипт
  • Как написать bassline
  • Как написать bash скрипт windows
  • Как написать bash скрипт linux