Как я могу запустить приложение CLI в качестве службы Windows?

#windows #windows-services

Вопрос:

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

Не так уж и круто.

Я был отчасти уверен, что есть простой способ сделать это — универсальная оболочка службы, которую можно настроить с помощью файла журнала для stdout и. stderr

Я проверил svchost.exe , но, согласно этому сайту, это только для DLL-файлов. Жалость.

ИЗМЕНИТЬ: Приложение должно быть запущено из пакетного файла. Похоже, что FireDaemon делает свое дело, но я думаю, что это немного излишне для того, что можно сделать в.. Ну Да Ладно, Не Здесь Придумано

Ответ №1:

Ознакомьтесь srvany.exe с набором ресурсов. Это позволит запускать что угодно в качестве службы.

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

 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMyServiceParameters]
"Application"="C:\Windows\System32\cmd.exe"
"AppParameters"="/C C:\My\Batch\Script.cmd"
"AppDirectory"="C:\My\Batch"
 

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

Ответ №2:

Я бы рекомендовал NSSM: Менеджер по обслуживанию без Отсоса.

  • 32/64-разрядные бывшие
  • Общественное достояние (!)
  • Правильно реализует сообщения об остановке службы и посылает надлежащий сигнал вашим приложениям для плавного завершения работы.

Ответ №3:

Почему бы просто не реализовать очень тонкую оболочку службы, вот краткое руководство по написанию службы в .NET Написание полезной службы Windows в .NET за пять минут

Когда вы запустите это, вы можете использовать класс Process для запуска приложения и настроить его так, чтобы вы могли самостоятельно обрабатывать stdout/stderr (ProcessStartInfo-ваш друг).

Ответ №4:

Проверьте FireDaemon. Существует бесплатная версия (я думаю, FireDaemon lite), которая позволяет устанавливать только 1 службу одновременно, но это очень полезный инструмент для настройки служб. Он также правильно обертывает пакетные файлы, если это требуется.

Ответ №5:

Я поддерживаю вариант firedaemon. Вы также можете установить параметр, позволяющий службе взаимодействовать с рабочим столом, чтобы разрешить ей отображать окно вывода cli. Они больше не предлагают бесплатную версию, но если вы поищете в Интернете firedaemon lite, вы можете найти более старую бесплатную версию lite или, возможно, пойти по платному маршруту.