2008-10-03 5 views
6

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

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

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

Я проверил svchost.exe, но according to this site, его только для материалов DLL. Жалость.

EDIT: Приложение необходимо запустить из командного файла. FireDaemon, кажется, сделать трюк, но я думаю, что это немного перебор, для чего-то, что может быть сделано в < 10 строк кода Python ... Ну да ладно, не придуманного Здесь ...

ответ

10

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

1

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

3

Почему не просто реализовать очень тонкую оболочку службы, вот краткое руководство руководство для написания службы в .NET Writing a Useful Windows Service in .NET in Five Minutes

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

0

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

4

Я бы порекомендовал NSSM: The Non-Sucking Service Manager.

  • 32/64-битных EXEs
  • Public Domain (!)
  • Правильно реализующие сообщения остановки службы, и посылает правильный сигнал для ваших приложений для постепенного выключения.
Смежные вопросы