Запуск bat файла как службы

Обновлено: 30.06.2024

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

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

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

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

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

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

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

sc1.jpg

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

sc2.jpg

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


Изменить параметры службы можно командлетом Set-Service:

sc4.jpg

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

Dragokas

Very kind Developer

Можно ли запустить клиентское приложение в качестве службы? В одной из статей я описывал способы создания службы 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.jpg

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

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

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

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

nssm2.jpg

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

nssm3.jpg

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

nssm4.jpg

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

nssm5.jpg

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

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

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

nssm6.jpg

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

nssm7.jpg


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

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

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

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

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

Можно сконвертировать сначала в *.exe.
Bat_to_exe_converter.
А там уже дело техники.

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

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

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

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

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

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

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

. Вот для наглядности скопируй этот тектст и сделай батник из него -
Замени только (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 . Причина: исправление

Сегодня утром была установлена ​​база данных ElasticSearch. Метод запуска состоит в двойном щелчке по файлуasticsearch.bat. В это время появится окно DOS, но когда мы закрываем окно, мы не можем получить доступ к базе данных. Это очень небезопасно, когда проект фактически развернут, поэтому Чтобы найти способ реализовать процесс демона, запустите этот bat-файл в качестве службы Windows, ниже мы используем nssm и nssm для преобразования bat в службу.


2. После загрузки это сжатый пакет. Распакуйте и найдите 32/64 бит nssm.exe, соответствующий вашей системе.

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


3. Запустите окно DOS в текущей папке и выполните nssm install <имя службы> Например: nssm install Elasticsearch (имя настраиваемой службы).

Затем нажмите Enter для отображения интерфейса конфигурации nssm. В интерфейсе выберите адрес .bat-файла в вашем проекте, например:


в Path Выберите путь установки .bat (.exe),

Startup directory Выберите каталог вашего узла приложения, то есть каталог запуска файла проекта (обычно автоматически заполняется)

Нажмите установить сервис.

При успешном отображении служба была успешно установлена!


Примечание. Служба безопасности перехватит услугу и просто проигнорирует ее.

В это время вы увидите сервис Elasticsearch в списке локальных компьютерных сервисов. Win + R, services.msc.


Другие рабочие команды

Как и выше, добавьте файл .bat в исходный код ElasticSearch-Head для регистрации в качестве службы Windows.

Как создать bat файл в Windows

Нередко советы по тем или иным действиям и исправлениям в Windows 10, 8 и Windows 7 включают в себя шаги наподобие: «создайте файл .bat со следующим содержимым и запустите его». Однако, начинающий пользователь не всегда знает, как это сделать и что собой представляет такой файл.

В этой инструкции подробно о том, как создать командный файл bat, запустить его и некоторая дополнительная информация, которая, возможно, окажется полезной в контексте рассматриваемой темы.

Создание .bat файла с помощью блокнота

Первый и самый простой способ создать bat файл — использовать стандартную программу «Блокнот», присутствующую во всех актуальных версиях Windows.

Шаги по созданию будут следующими

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

Запуск bat файла от имени администратора

Примечание: в дальнейшем, если вы захотите отредактировать созданный файл, просто нажмите по нему правой кнопкой мыши и выберите «Изменить».

Существуют и другие способы сделать bat файл, но все они сводятся к написанию команд по одной команде в строке в текстовый файл в любом текстовом редакторе (без форматирования), который затем сохраняется с расширением .bat (например, в Windows XP и 32-битной Windows 7 вы даже можете создать файл .bat в командной строке с помощью текстового редактора edit).

Запуск программ в файле bat и другие базовые команды

Чаще всего бывают следующие задачи: запуск программы или нескольких программ из .bat файла, запуск какой-то функции (например, очистка буфера обмена, раздача Wi-Fi с ноутбука, выключение компьютера по таймеру).

Для запуска программы или программ используйте команду:

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

После пути к программе можно также указать параметры, с которыми она должна запускаться, например (аналогично, если параметры запуска содержат пробелы, возьмите их в кавычки):

Примечание: в двойных кавычках после start по спецификациям должно указываться имя командного файла, отображаемое в заголовке командной строки. Это необязательный параметр, но при отсутствии этих кавычек выполнение bat файлов, содержащих кавычки в путях и параметрах может пойти неожиданным образом.

Еще одна полезная возможность — запуск другого bat файла из текущего файла, сделать это можно с помощью команды call:

Переданные параметры при запуске можно прочитать внутри другого bat файла, например, мы вызываем файл с параметрами:

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

Т.е. для каждого параметра мы используем его порядковый номер со знаком процента. Результатом в приведенном примере будет вывод в окно команд всех переданных параметров (команда echo используется для вывода текста в окно консоли).

По умолчанию, окно команд закрывается сразу после выполнения всех команд. Если нужно прочитать информацию внутри окна, используйте команду pause — она остановит выполнение команд (или закрытие окна) до нажатия любой клавиши в консоли со стороны пользователя.

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

При желании, вы можете запустить программу в свернутом виде или развернутом видео с помощью параметров MIN и MAX перед указанием самой программы, например:

Для закрытия окна команд после выполнения всех команд (хотя, обычно оно и так закрывается при использовании start для запуска), используйте команду exit в последней строке. В случае, если консоль все равно не закрывается после запуска программы, попробуйте использовать такую команду:

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

Как уже было отмечено, это лишь очень базовые сведение о наиболее часто используемых командах в bat файлах. При необходимости выполнить дополнительные задачи, попробуйте найти нужную информацию в интернете (поищите, например, «сделать что-то в командной строке» и используйте эти же команды в файле .bat) или задайте вопрос в комментариях, я постараюсь помочь.

Читайте также: