Пишем BAT(батник) файл для запуска и остановки службы в Windows
Возникла необходимость автоматизировать для пользователей запуск и остановку определенной службы 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]
Где взять имя службы? Открываем службы, находим нужную, открываем и смотрим поле «Имя службы»:
В итоге у нас будет:
net start AtolLicSvc(Если служба AtolLicSvc, у вас ваш вариант)
Сохраняем и переименовываем файл с «Запуск службы.txt» в «Запуск службы.bat«
5. Проверяем работу службы. Казалось бы все! Но нет! Это же Windows! Выскакивает окно запуска службы и пропадает. А служба как спала так и спит. Что не так? Все дело в правах админа. Вроде не сложно, но пояснять сотрудникам, запускайте с правами админа, слишком сложно для их понимания! Читаем по быстрому инфу «как запустить bat файл от имени админа автоматический?», ответ:
ничего сложного. — «правой кнопкой мыши на файле», «свойства»; — вкладка «ярлык», . эмм. а где она? О_о
6. Вносим правки, создаем ярлык
Логично, вкладки нет, это не ярлык! Создаем из нашего батника «Запуск службы.bat» «Ярлык»: убираем батники подальше от рук пользователей, допустим на диск D. Правой кнопкой мыши на батнике: «отправить», «рабочий стол (создать ярлык)». И вот уже на ярлыке:
— «правой кнопкой мыши на ярлыке», «свойства»; — вкладка «ярлык», кнопка «Дополнительно»; — ставим галку «запуск от имени администратора».
7. Повторный запуск службы через BAT файл. После этих манипуляций, если запустить ярлык «Запуск службы.bat — ярлык», служба стартует, согласно структуре в файле «net start AtolLicSvc»
Для батника который будет останавливать службу, все тоже самое. И да, вариантов решения задачи много, спорить не буду, но описал вариант решения который применил сам.
Как создать службу windows bat
Сообщения: 3486 Благодарности: 506
——- Просьба обращаться на «ты». Посты на абракадарском языке в игноре .
. Вот для наглядности скопируй этот тектст и сделай батник из него — Замени только (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 . Причина: исправление
Создать Windows-службу из exe или bat-файла в Powershell DSC
Автор: Super User. Категория: ИТ.
Если вам когда-нибудь понадобится создать Windows-службу из исполняемого exe-файла или даже пакетного bat-файла c помощью Powershell DSC, можете использовать следующую конфигурацию.
Решение основано на утилите NSSM, которая очень похожа на srvany.exe (из пакета Windows 2003 Kit). Основное отиличие NSSM от srvany — в том, что srvany не закрывает «обернутый» или «низлежащий» процесс, когда служба останавливается. А NSSM — закрывает. Скачать NSSM.
Выбор языка
Друзья
powershell (ru) 40
script 29
скрипт 20
exchange 2013 (ru) 19
powershell (en) 16
lync 2013 (ru) 13
exchange (ru) 13
Все материалы являются собственностью администратора блога. Перепечатка материалов в интернет- или бумажной прессе возможны только при размещении активной ссылки на блог.
Как создать службу с файлом .bat на Windows 2008 Server?
Я создал сервис, используя
Но когда я запускаю его, происходит сбой со следующим сообщением об ошибке:
На Win2k3 я использовал srvany.exe из Resource Kit, но для Win2k8 нет набора ресурсов. Пока я установил srvany.exe на мою машину, но я не думаю, что это лучший способ сделать это.
Конечно, вы не можете запустить такой сервис. Вы пробовали использовать srvany в server 2008? Насколько я знаю, «официальной» версии srvany для s2k8 не существует, но вы всегда можете попробовать, не так ли?
РЕДАКТИРОВАТЬ: О, я забыл! Мы также используем FireDaemon для запуска не сервисных приложений в качестве сервисов. Тем не менее, это не бесплатно, и его функциональность слишком велика для ваших нужд.
Используйте NSSM для запуска .BAT или любого старого .EXE-файла в качестве службы. Это почти замена SRVANY и приложение без излишеств.
У меня была такая же проблема, как и у вас, и NSSM была единственной утилитой, которая работала.
Мы используем Task Scheduler для запуска задач при каждом запуске компьютера (независимо от того, вошел пользователь в систему или нет)
Вы не можете просто запустить файл .BAT или любой старый файл .EXE в качестве службы. Службы Windows не работают, что вы. Вы можете использовать утилиту, такую как non-Sucking Service Manager (NSSM) или несвободную утилиту SRVANY от Microsoft, для запуска произвольной программы в качестве службы, но вы можете обнаружить, что не получаете «изящного» поведения при остановке.
Команда SC просто добавляет необходимые записи реестра для службы — если указанный вами файл не является допустимым exe-файлом службы, он не превратит его в один.
Вот что нужно сделать .
На момент публикации этой статьи не было средств Windows Server 2008 Resource Kit, поэтому получите «srvany.exe» из «Windows Server 2003 Resource Kit Tools» и скопируйте его в подходящее место на вашем сервере Win2008 (например, C: \ Windows \ System32 \). Используйте «sc», чтобы создать новый сервис, который запускает «srvany» (например, sc create MyService binPath = C: \ Windows \ System32 \ srvany.exe DisplayName = «My Custom Service») Использование RegEdit: создайте ключ «Parameters» для вашего служба (например, HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ MyService \ Paramaters \) Используя RegEdit: в только что созданном ключе «Parameters» создайте строковое значение с именем «Application» и введите полный путь к приложению, которое вы хотите запустить как сервис. (Цитаты не требуются.)
И это должно сделать это.
Примечание: некоторые приложения хранят свои настройки в кусте пользователя, а не в HKEY_LOCAL_MACHINE, поэтому вам нужно будет запустить приложение для его настройки, а затем настроить службу для запуска от имени этого пользователя.
попробуй это . у меня сработало ..
Я наткнулся на эту вещь. Вот инструмент под названием Bat_To_Exe_Converter. Конвертировать любые файлы .bat в файлы .exe очень просто. Попытайся. Сначала загрузите загрузчик, и он автоматически загрузит Bat_To_Exe_Converter. Это действительно помогло мне создать сервис, который запускает мой .bat файл через .exe. http://download.cnet.com/Bat-To-Exe-Converter/3001-2069_4-10555897.html?spi=eae5ab48292cc101b5f0ec370cf99ad0
Я использовал Windows Schtasks.
Я нашел два других варианта, которые не позволят вам достать свой кошелек.
Вы можете sc запустить, srvany который затем указывает на вашу программу. (есть сообщение на форуме, на которое я не могу дать ссылку, потому что мне не хватает представителя здесь, хотя я делаю это на StackOverflow — ворчать)
Вот шаги, которые использовал оригинальный плакат:
Используйте sc для создания новой службы, которая запускается srvany (например sc create MyService binPath=C:\Windows\System32\srvany.exe DisplayName=»My Custom Service» )
Использование RegEdit: создайте Parameters ключ для вашего сервиса (например HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\ )
Используя RegEdit: в только что созданном Parameters ключе создайте строковое значение с именем Application и введите полный путь к приложению, которое вы хотите запустить как сервис. (Цитаты не требуются.)
Если это кажется чем-то вроде взлома , вы можете создать службу .NET для запуска вашего процесса. Если вы хотите пропустить несколько шагов, вот служба с открытым исходным кодом .NET, которая может запускать общие процессы:
Настройте его на свои нужды, но он сделает большую часть того, что вы хотите из коробки.
Статья Создание службы в Windows
Dragokas
Very kind Developer
Иногда может потребоваться взять исполняемый файл и зарегистрировать его в качестве службы Windows. Для этого есть несколько способов, я обычно пользуюсь двумя из них.
Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами — просматривать состояние, управлять (запускать, останавливать и т.п.), изменять параметры, а также создавать новые службы.
При создании службы с помощью SC нет необходимости вручную создавать записи в реестре и затем перезагружать компьютер, чтобы обеспечить обновление базы данных диспетчером служб. Также SC позволяет указать имя удаленного компьютера, что дает возможность управлять службами как на локальном, так и на удаленном компьютере.
Для создания нового сервиса запускаем команду Sc create. Она создает запись службы в реестре и в базе данных диспетчера служб. Sc create имеет следующий синтаксис:
ServiceName — указывает имя, которое будет присвоено разделу службы в реестре. Имейте в виду, что это имя отличается от отображаемого имени службы (имени, которое отображается в оснастке «Services»); binPath — указывает путь к исполняемому файлу службы.
Для примера создадим службу MyService, укажем отображаемое имя My New Service, зададим тип службы и поставим ее на авто-запуск:
Затем откроем оснастку «Services» и посмотрим результат.
Изменять параметры уже созданной службы можно командой Sc config. Например, мне не понравилось отображаемое имя службы и я хочу его изменить:
PowerShell может почти все, в том числе и управлять службами Windows. Создать новую службу можно с помощью командлета New-Service. Создадим такой же сервис, как и в предыдущем примере, только добавим к нему описание (Description):
В принципе 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 можно указать ключи, необходимые для запуска службы.
Также на этапе создания новой службы можно указать некоторые дополнительные параметры.
На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.
Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:
• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений; • Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения; • Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока; • И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.
Возможно отключить некоторые или даже все методы, однако для разных приложений срабатывают разные методы и для корректного завершения работы приложения рекомендуется оставить все как есть.
По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.
На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.
На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.
Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:
После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.
А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.
Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду