#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 или, возможно, пойти по платному маршруту.