Как запустить приложение CLI в качестве службы Windows? - PullRequest
7 голосов
/ 03 октября 2008

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

Не очень круто.

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

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

РЕДАКТИРОВАТЬ: Приложение должно быть запущено из пакетного файла. FireDaemon, кажется, делает свое дело, но я думаю, что это немного излишне, для чего-то, что может быть сделано в <10 строках кода Python ... О, хорошо, <em>Not Invented Here ...

Ответы [ 5 ]

11 голосов
/ 03 октября 2008

Извлечение srvany.exe из Resource Kit . Это позволит запускать что-либо как сервис.

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

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters]
"Application"="C:\\Windows\\System32\\cmd.exe"
"AppParameters"="/C C:\\My\\Batch\\Script.cmd"
"AppDirectory"="C:\\My\\Batch"

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

4 голосов
/ 04 июня 2012

Я бы порекомендовал NSSM: Менеджер неосасывающих услуг .

  • 32/64-битные EXE-файлы
  • Public Domain (!)
  • Правильно реализует сообщения об остановке службы и отправляет соответствующий сигнал вашим приложениям для корректного завершения работы.
3 голосов
/ 03 октября 2008

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

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

1 голос
/ 03 октября 2008

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

0 голосов
/ 10 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...