Запустить bat как службу windows 10

Однажды вы задумаетесь, как превратить скрипт или приложение в Windows-службу. Скорее всего, задача окажется не такой уж тривиальной – приложению как минимум по...

Однажды вы задумаетесь, как превратить скрипт или приложение в Windows-службу. Скорее всего, задача окажется не такой уж тривиальной – приложению как минимум потребуется специальный интерфейс для получения команд от системы. А раз есть требования и ограничения, то есть и скрипты, и милые сердцу костылики для преодоления.

Статья будет полезна тем, кто, как и я — «программист не настоящий».

Зачем нужна служба, если есть назначенные задания

В отличие от назначенных заданий служба работает постоянно, запускается при старте ПК и может управляться средствами Windows. А еще регулярно запускаемому скрипту могут понадобиться данные с предыдущего запуска, и может быть полезно получение данных из внешних источников — например, в случае TCP или Web сервера.

Лично мне за последние пять лет приходилось создавать службу три с половиной раза:

  • Потребовалось создать сервис на fail2ban для Windows 2003., который работал с логами FileZilla и Apache, а при подозрении на брутфорс блокировал IP штатными средствами Windows — ipsec.
  • Аналог телнет-сервера для домашних версий Windows. Понадобилось выполнять команды на удаленных рабочих станциях, которые были под управлением Windows 7 Home. По сути, вторая попытка поиграть в службы.
  • Музыкальный проигрыватель для торгового зала под Windows. Задачу по ТЗ можно было решить при помощи mpd и пачки скриптов, но я решил — если уж делать скрипты, то почему бы и не «сваять» проигрыватель самому. За основу взял библиотеку BASS.dll.
  • Когда выбирали веб-сервер с поддержкой загрузки файлов под Windows, одним из вариантов был HFS. Сам по себе работать он не может, поэтому пришлось «запихивать» его в службу. В результате решение не понравилось, и просто установили «тему» Apaxy на web-сервере Apache.

Для создания службы можно использовать взрослые языки программирования вроде C. Но если вы не хотите связываться с Visual Studio, то возьмите готовые утилиты. Существуют платные решения вроде FireDaemon Pro или AlwaysUp, но мы традиционно сосредоточимся на бесплатных.

Способ первый. От Microsoft

Этот уже немолодой механизм состоит из двух компонентов: утилиты instsrv.exe для установки сервиса и srvany.exe — процесса для запуска любых исполняемых файлов. Предположим, что мы создали веб-сервер на PowerShell при помощи модуля Polaris. Скрипт будет предельно прост:

New-PolarisGetRoute -Path '/helloworld' -Scriptblock {
    $Response.Send('Hello World!')
}

Start-Polaris -Port 8080

while($true) {
    Start-Sleep -Milliseconds 10
}


Работа так называемого «сервера».

Теперь попробуем превратить скрипт в службу. Для этого скачаем Windows Resource Kit Tools, где будут наши утилиты. Начнем с того, что установим пустой сервис командой:

instsrv WebServ C:temprktoolssrvany.exe

Где WebServ — имя нашего нового сервиса. При необходимости через оснастку services.msc можно задать пользователя, под которым будет запускаться служба, и разрешить взаимодействие с рабочим столом.

Теперь пропишем путь к нашему скрипту при помощи магии реестра. Параметры службы есть в разделе реестра HKLMSYSTEMCurrentControlSetServicesWebServ. В нем нам нужно добавить новый раздел Parameters и создать там строковый параметр Application, указав в нем путь к исполняемому файлу. В случае скрипта PowerShell он будет выглядеть так:

C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -ExecutionPolicy Bypass -NoProfile -File C:tempPolarisserver.ps1


Настроенная служба.

Можно запустить и радоваться.


Работающая служба.

Однако у этого способа есть недостатки:

  • Утилиты старые, разработаны до изобретения PowerShell, UAC и прочих вещей.
  • Srvany не контролирует работу приложения. Даже если оно выпадет в ошибку, служба продолжит свое дело как ни в чем не бывало.
  • Придется донастраивать и копаться в реестре. Вы же помните, что копаться в реестре небезопасно?

Поэтому перейдем к методу, частично лишенному этих проблем.

Способ второй, почти взрослый

Существует утилита под названием NSSM — Non-Sucking Service Manager, что можно перевести как не-плохой менеджер служб. В отличие от предыдущей, она поддерживается разработчиком, и исходный код опубликован на сайте. Помимо обычного способа, доступна и установка через пакетный менеджер Chocolately.

Создать сервис можно из обычной командной строки, вооружившись документацией на сайте разработчика. Но мы воспользуемся PowerShell. Потому что можем, разумеется.

$nssm = (Get-Command ./nssm).Source
$serviceName = 'WebServ'
$powershell = (Get-Command powershell).Source
$scriptPath = 'C:tempPolarisserver.ps1'
$arguments = '-ExecutionPolicy Bypass -NoProfile -File "{0}"' -f $scriptPath
& $nssm install $serviceName $powershell $arguments
& $nssm status $serviceName
Start-Service $serviceName
Get-Service $serviceName


Установка через PowerShell.

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


И вправду работает.

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

GUI запускается командой:

nssm.exe install ServiceName


Настроить можно даже приоритет и использование ядер процессора.

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

Налицо нехватка «жести». Поэтому я перейду к самому хардкорному методу из всех опробованных.

Способ третий. AutoIT

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

Листинг скрипта

Итак, попробуем «завернуть» в нее наш веб-сервис:

#NoTrayIcon
#RequireAdmin
#Region
#AutoIt3Wrapper_Version=Beta
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_UseX64=y
#EndRegion

Dim $MainLog = @ScriptDir & "test_service.log"

#include <services.au3>
#include <WindowsConstants.au3>

$sServiceName="WebServ"

If $cmdline[0] > 0 Then
    Switch $cmdline[1]
        Case "install", "-i", "/i"
            InstallService()
        Case "remove", "-u", "/u", "uninstall"
            RemoveService()
        Case Else
            ConsoleWrite(" - - - Help - - - " & @CRLF)
            ConsoleWrite("params : " & @CRLF)
            ConsoleWrite(" -i : install service" & @CRLF)
            ConsoleWrite(" -u : remove service" & @CRLF)
            ConsoleWrite(" - - - - - - - - " & @CRLF)
            Exit
    EndSwitch
Else
    _Service_init($sServiceName)
    Exit
EndIf

Func _main($iArg, $sArgs)
If Not _Service_ReportStatus($SERVICE_RUNNING, $NO_ERROR, 0) Then
    _Service_ReportStatus($SERVICE_STOPPED, _WinAPI_GetLastError(), 0)
    Exit
EndIf

$bServiceRunning = True
$PID=Run("C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -ExecutionPolicy Bypass -NoProfile -File C:tempPolarisserver.ps1")

While $bServiceRunning
_sleep(1000)
WEnd
ProcessClose($PID)

_Service_ReportStatus($SERVICE_STOP_PENDING, $NO_ERROR, 1000)
DllCallbackFree($tServiceMain)
DllCallbackFree($tServiceCtrl)
_Service_ReportStatus($SERVICE_STOPPED, $NO_ERROR, 0)
DllClose($hAdvapi32_DLL)
DllClose($hKernel32_DLL)
EndFunc

Func _Sleep($delay)
Local $result = DllCall($hKernel32_DLL, "none", "Sleep", "dword", $delay)
EndFunc

Func InstallService()
    #RequireAdmin
    Local $bDebug = True
    If $cmdline[0] > 1 Then
        $sServiceName = $cmdline[2]
    EndIf
    If $bDebug Then ConsoleWrite("InstallService("&$sServiceName &"): Installing service, please wait")
    _Service_Create($sServiceName, $sServiceName, $SERVICE_WIN32_OWN_PROCESS, $SERVICE_AUTO_START, $SERVICE_ERROR_SEVERE, '"' & @ScriptFullPath & '"');,"",False,"","NT AUTHORITYNetworkService")
    If @error Then
        Msgbox("","","InstallService(): Problem installing service, Error number is " & @error & @CRLF & " message : " & _WinAPI_GetLastErrorMessage())
    Else
        If $bDebug Then ConsoleWrite("InstallService(): Installation of service successful")
    EndIf
    Exit
EndFunc

Func RemoveService()
    _Service_Stop($sServiceName)
    _Service_Delete($sServiceName)
    If Not @error Then
    EndIf
    Exit
EndFunc

Func _exit()
    _Service_ReportStatus($SERVICE_STOPPED, $NO_ERROR, 0);
EndFunc

Func StopTimer()
    _Service_ReportStatus($SERVICE_STOP_PENDING, $NO_ERROR, $iServiceCounter)
    $iServiceCounter += -100
EndFunc

Func _Stopping()
    _Service_ReportStatus($SERVICE_STOP_PENDING, $NO_ERROR, 3000)
 EndFunc

Разберу подробнее момент запуска приложения. Он начинается после операции $bServiceRunning = True и превращается в, казалось бы, бесконечный цикл. На самом деле этот процесс прервется, как только служба получит сигнал о завершении — будь то выход из системы или остановка вручную.

Поскольку программа для скрипта является внешней (powershell.exe), то после выхода из цикла нам нужно закончить ее работу с помощью ProcessClose.

Для этого скрипт необходимо скомпилировать в .exe, а затем установить службу, запустив exe с ключом -i.


Оно работает!

Разумеется, этот способ не самый удобный, и все дополнительные возможности придется реализовывать самостоятельно, будь то повторный запуск приложения при сбое или ротация логов. Но зато он дает полный контроль над происходящим. Да и сделать в итоге можно куда больше — от уведомления в Telegram о сбое службы до IPC-взаимодействия с другими программами. И вдобавок — на скриптовом языке, без установки и изучения Visual Studio.

Расскажите, а вам приходилось превращать скрипты и приложения в службы?

Сделай сам

Блог о самоделках, поделках, программировании на ява скрипте и 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 коды возврата.

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

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

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

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

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

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

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

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

Nssm2

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

Nssm3

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

Nssm4

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

Nssm5

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

nssm install notepad "C:Windowssystem32notepad.exe"

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

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

Nssm6

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

Nssm7

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

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

nssm remove notepad confirm

можно обойтись и без подтверждения.

Nssm8


Чтобы запустить одно приложение, необходимо запустить пакетный файл (например, запустить Jetty, отобразить живые журналы и т. Д.). Приложение будет работать, только если этот пакетный файл запущен. Поэтому я вынужден запускать этот пакетный файл, а не выходить с сервера Windows.

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






Ответы:


NSSM является полностью бесплатным и сверхлегким, с командной строкой / терминалом в качестве администратора:

nssm install "YourCoolServiceNameLabel"

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

удалить

nssm remove "YourCoolServiceNameLabel"







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







Для этого есть встроенный Windows cmd: sc create . Не так красиво, как nssm, но вам не нужно загружать дополнительное программное обеспечение.

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]

Заметка

  • старт = спрос означает, что вы должны запустить сервис самостоятельно
  • пробел требуется после =
  • Я столкнулся с ошибкой при запуске службы, что служба не ответила своевременно, но было ясно, что служба успешно запустила .bat. Еще не копался в этом, но этот поток испытал то же самое и решил это, используя nssm для установки сервиса.






Нет необходимости в дополнительном программном обеспечении. Используйте планировщик задач -> создать задачу -> скрытый. Флажок для скрытого находится в левом нижнем углу. Задайте задачу для запуска при входе в систему (или при любых других условиях) и выберите задачу на вкладке действий. Запуск скрытого гарантирует, что задача выполняется в фоновом режиме, как служба.

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


Как говорит Дуг Керри, используйте RunAsService.

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

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

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


Хотя это не бесплатно (но 39 долларов), FireDaemon работал так хорошо для меня, я должен рекомендовать его. Он запускает ваш пакетный файл, но имеет множество дополнительных и очень полезных функций, таких как планирование, мониторинг обслуживания, установка сервисов на основе графического интерфейса или XML, зависимости, переменные среды и управление журналами.

Я начал использовать FireDaemon для запуска серверов приложений JBoss ( run.bat ), но вскоре понял, что богатство возможностей конфигурации FireDaemon позволило мне отказаться от пакетного файла и воссоздать назначение его команд в определении службы FireDaemon.

Есть также СУПЕР FireDaemon под названием Trinity, на который вы можете обратить внимание, если у вас есть большое количество серверов Windows, на которых можно управлять этой службой (или технически любой службой).


На сервере Windows 2019 вы можете запустить Java-сервер Minecraft с помощью следующих команд:

sc create minecraft-server DisplayName = «minecraft-server» binpath = «cmd.exe /CC:UsersAdministratorDesktoprungui1151.lnk» type = own start = auto

Файл .lnk — это стандартный ярлык Windows для командного файла.

— .bat файл начинается —

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

— .bat файл заканчивается —

Все это потому что:

служба не знает, как запустить в папке,

cmd.exe не знает, как запустить в папке

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

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




AlwaysUp легко запустит ваш пакетный файл как сервис. Он похож на FireDaemon (упомянутый выше) и не является бесплатным, но вы можете найти богатый набор функций, который будет полезен в профессиональной среде.

Удачи!

thanks for your comments
Both tools didnt work for me, sadly. However I was able to do it with a software called Java Service Wrapper. This is not a free software, so I needed to buy a license to get it to work.
The steps were simple:

1.-Create a folder with the name of the service, then inside add 4 folders: lib,bin,logs,conf

2.-On the lib folder you have to copy your jar and also the wrapper.jar and wrapper.dll (these last two are in the zip you download from the website)

3.-Copy 4 files to the bin folder: InstallApp-NT.bat.in, App.bat.in, UnintstallApp-NT.bat.in and wrapper.exe (this last one is the one that defines your license, if you can get a file wrapper.exe from somebody else who had paid a license it will work fine. These file also came in the zip from the website) Remove the .in from the batch files

4.-The most tricky step is this: You have to copy from the wrapper’s folder called conf a file called wrapper.conf.in Remove the .in extension and edit it with a tex editor. The most important lines you have to edit are:

wrapper.java.command=C:Program Files (x86)Javajre7binjava //Specify JRE Path. Will work with eviroment variable

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp //Choosing this class means your are using a .jar file to execute when the service starts

wrapper.java.classpath.1=C:LocalServicelibwrapper.jar //This one is constant. 
wrapper.java.classpath.2=C:LocalServicelibLocalService.jar //This is the path to your executable jar

wrapper.java.library.path.1=C:LocalServicelib //Path to your own lib folder (the you created at the begining)

wrapper.app.parameter.1=C:LocalServicelibLocalService.jar // again the path to your jar

Then just execute the InstallApp-NT.bat and start the service and your are done

It worked to me with absolute paths, however according to documentation it will work fine with relative path too.
This is how I solved my problem and I hope someone with the same issue will find this helpful

See you next time!

thanks for your comments
Both tools didnt work for me, sadly. However I was able to do it with a software called Java Service Wrapper. This is not a free software, so I needed to buy a license to get it to work.
The steps were simple:

1.-Create a folder with the name of the service, then inside add 4 folders: lib,bin,logs,conf

2.-On the lib folder you have to copy your jar and also the wrapper.jar and wrapper.dll (these last two are in the zip you download from the website)

3.-Copy 4 files to the bin folder: InstallApp-NT.bat.in, App.bat.in, UnintstallApp-NT.bat.in and wrapper.exe (this last one is the one that defines your license, if you can get a file wrapper.exe from somebody else who had paid a license it will work fine. These file also came in the zip from the website) Remove the .in from the batch files

4.-The most tricky step is this: You have to copy from the wrapper’s folder called conf a file called wrapper.conf.in Remove the .in extension and edit it with a tex editor. The most important lines you have to edit are:

wrapper.java.command=C:Program Files (x86)Javajre7binjava //Specify JRE Path. Will work with eviroment variable

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp //Choosing this class means your are using a .jar file to execute when the service starts

wrapper.java.classpath.1=C:LocalServicelibwrapper.jar //This one is constant. 
wrapper.java.classpath.2=C:LocalServicelibLocalService.jar //This is the path to your executable jar

wrapper.java.library.path.1=C:LocalServicelib //Path to your own lib folder (the you created at the begining)

wrapper.app.parameter.1=C:LocalServicelibLocalService.jar // again the path to your jar

Then just execute the InstallApp-NT.bat and start the service and your are done

It worked to me with absolute paths, however according to documentation it will work fine with relative path too.
This is how I solved my problem and I hope someone with the same issue will find this helpful

See you next time!

Понравилась статья? Поделить с друзьями:
  • Запустите средство устранения неполадок центра обновления windows через панель управления
  • Заставка цифровые часы на рабочий стол windows 10
  • Запустите служебную программу ос windows назначенные задания
  • Заставка трубопровод для windows 10 скачать
  • Запустите проверку системных файлов windows sfc scannow