Bat файл как служба windows
Перейти к содержимому

Bat файл как служба windows

Статья Создание службы в Windows

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

Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами — просматривать состояние, управлять (запускать, останавливать и т.п.), изменять параметры, а также создавать новые службы.

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

Для создания нового сервиса запускаем команду Sc create. Она создает запись службы в реестре и в базе данных диспетчера служб. Sc create имеет следующий синтаксис:

ServiceName — указывает имя, которое будет присвоено разделу службы в реестре. Имейте в виду, что это имя отличается от отображаемого имени службы (имени, которое отображается в оснастке «Services»);
binPath — указывает путь к исполняемому файлу службы.

Для примера создадим службу MyService, укажем отображаемое имя My New Service, зададим тип службы и поставим ее на авто-запуск:

Затем откроем оснастку «Services» и посмотрим результат.

sc1.png

Изменять параметры уже созданной службы можно командой Sc config. Например, мне не понравилось отображаемое имя службы и я хочу его изменить:

sc2.png

PowerShell может почти все, в том числе и управлять службами Windows. Создать новую службу можно с помощью командлета New-Service. Создадим такой же сервис, как и в предыдущем примере, только добавим к нему описание (Description):

sc4.png

В принципе PowerShell имеет примерно такой же функционал как и Sc.exe, разве что позволяет добавить описание. А вот для удаления служб в PS простого способа нет, придется воспользоваться вот такой конструкцией:

Dragokas
Angry & Scary Developer
  • 22 Фев 2014
  • #2

Можно ли запустить клиентское приложение в качестве службы? В одной из статей я описывал способы создания службы Windows штатными средствами ОС. Однако не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager.

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft, начиная с Windows 2000 и заканчивая Windows 8. NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc, на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.
Для демонстрации возможностей NSSM попробуем запустить Блокнот Windows в качестве службы на Windows 8.1.

Создание службы

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду

которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

nssm1.png

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

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

• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
• Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
• Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
• И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

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

nssm2.png

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

nssm3.png

На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.

nssm4.png

На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.

nssm5.png

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

nssm6.png

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

nssm7.png

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

Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду

Run batch file as a Windows service

In order to run one application, a batch file has to be kicked off (which does things like start Jetty, display live logs, etc). The application will work only if this batch file is running. I am hence forced to have this batch file running and not logout from the Windows server.

Can this batch file be run as a service? I am experimenting with one of the suggestions from a similar question.

9 Answers 9

Trending sort

Trending sort is based off of the default sorting method — by highest score — but it boosts votes that have happened recently, helping to surface more up-to-date answers.

It falls back to sorting by highest score if no posts are trending.

Switch to Trending sort

NSSM is totally free and hyper-easy, running command prompt / terminal as administrator:

then a dialog will appear so you can choose where is the file you want to run.

There’s a built in windows cmd to do this: sc create. Not as fancy as nssm, but you don’t have to download an additional piece of software.

  • start=demand means you must start the service yourself. Options include: boot, system, auto, demand, disabled, delayed-auto
  • whitespace is required after =
  • I did encounter an error on service start that the service did not respond in a timely manner, but it was clear the service had run the .bat successfully. Haven’t dug into this yet but this thread experienced the same thing and solved it using nssm to install the service.

user avatar

No need for extra software. Use the task scheduler -> create task -> hidden. The checkbox for hidden is in the bottom left corner. Set the task to trigger on login (or whatever condition you like) and choose the task in the actions tab. Running it hidden ensures that the task runs silently in the background like a service.

Note that you must also set the program to run «whether the user is logged in or not» or the program will still run in the foreground.

user avatar

On Windows 2019 Server, you can run a Minecraft java server with these commands:

sc create minecraft-server DisplayName= «minecraft-server» binpath= «cmd.exe /C C:\Users\Administrator\Desktop\rungui1151.lnk» type= own start= auto

The .lnk file is a standard windows shortcut to a batch file.

— .bat file begins —

java -Xmx40960M -Xms40960M -d64 -jar minecraft_server.1.15.1.jar

All this because:

service does not know how to start in a folder,

cmd.exe does not know how to start in a folder

Starting the service will produce «timely manner» error, but the log file reveals the server is running.

If you need to shut down the server, just go into task manager and find the server java in background processes and end it, or terminate the server from in the game using the /stop command, or for other programs/servers, use the methods relevant to the server.

As Doug Currie says use RunAsService.

From my past experience you must remember that the Service you generate will

  • have a completely different set of environment variables
  • have to be carefully inspected for rights/permissions issues
  • might cause havoc if it opens dialogs asking for any kind of input

not sure if the last one still applies . it was one big night mare in a project I worked on some time ago.

While it is not free (but $39), FireDaemon has worked so well for me I have to recommend it. It will run your batch file but has loads of additional and very useful functionality such as scheduling, service up monitoring, GUI or XML based install of services, dependencies, environmental variables and log management.

I started out using FireDaemon to launch JBoss application servers (run.bat) but shortly after realized that the richness of the FireDaemon configuration abilities allowed me to ditch the batch file and recreate the intent of its commands in the FireDaemon service definition.

There’s also a SUPER FireDaemon called Trinity which you might want to look at if you have a large number of Windows servers on which to manage this service (or technically, any service).

Bat файл как служба windows

Сообщения: 130
Благодарности: 3

Доброго дня всем.

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

Подскажите что нужно прописать там что бы сие реализовать.

Сообщения: 3486
Благодарности: 506

——-
Просьба обращаться на "ты".
Посты на абракадарском языке в игноре .

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

Сообщения: 130
Благодарности: 3

Сообщения: 3486
Благодарности: 506

Дельная вещичка. »

——-
Просьба обращаться на "ты".
Посты на абракадарском языке в игноре .

Сообщения: 130
Благодарности: 3

. Мдааа. Все вроде бы сделал, это пакетный пинг с логами на сервак. Но теперь такие грабли —

— получилось запускать этот уже ехе-шник как сервис, причем до логона. (не входя в винду).
А грабли в том что машина-то в домене. Пинги проходят, но, логи-то не пишутся на сервак.
Потом дошло что надо этот ехе-шник запускать с правами доменного юзверя.

А ВОТ И ГРАБЛИ — А КАК ЭТО СДЕЛАТЬ-ТО, ГДЕ И ЧТО ПРОПИСАТЬ .

Помогите люди добрые. Заранее благодарю.!

Сообщения: 130
Благодарности: 3

. Вот для наглядности скопируй этот тектст и сделай батник из него —
Замени только (myserver\Share\) на свой, и все. Мож чего получится.
IP заведомо не правильный, для того чтобы выполнялось условие создания отчета.

@Echo Off
TITLE PING AND MONITORING
@Echo Off
:begin
set /A count=count+1
echo Pinging number %count%
@echo
ping -n 4 127.0.0.254
rem if errorlevel 1 echo PING NO SUCCESSFULL %time%>> \\myserver\Share\%DATE%.txt
echo.
echo —————————————————————————-
if errorlevel 1 echo.>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo PING AND MONITORING>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo Date %date:

6,4% Time %time%>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo.>> \\myserver\Share\%DATE%.txt
if errorlevel 1 @echo
if errorlevel 1 @echo
if errorlevel 1 @echo
if errorlevel 1 @echo
if errorlevel 1 echo request timed out.>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo request timed out.>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo request timed out.>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo.>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo *************************************************************>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo Pause: 30 seconds.>> \\myserver\Share\%DATE%.txt
if errorlevel 1 echo *************************************************************>> \\myserver\Share\%DATE%.txt
@Echo Off
Echo Pause 30 seconds. Please Wait.
ping -n 30 127.0.0.1 >nul
cls
goto begin

Вот теперь я его в ехе-шник сделал и запустил как сервис. А где и как здесь прописывать доменного юзверя — ума не приложу.
МОЖ КТО ПОДСКАЖЕТ.

ДА, ЗАБЫЛ — ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ — НУЖНО ЧТО БЫ ЭТО ВСЕ РАБОТАЛО БЕЗ ВХОДА В СИСТЕМУ НА XP.

Последний раз редактировалось registeruser1, 27-12-2009 в 07:54 . Причина: исправление

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

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *