Преобразование программы на С++ в службу Windows?

Я написал консольную программу, которая "делает вещи" - в основном, используя boost. Как преобразовать его в службу Windows? Что я должен знать о Windows Services заранее?

Ответы

Ответ 1

Хороший пример того, как настроить минимальную службу в MSDN. См. Части о написании основной функции, точки входа, а также пример кода.

После того, как у вас есть встроенная и работающая служба Windows, вы обнаружите следующую важную информацию: это боль для отладки. Там нет терминала (и, следовательно, нет stdout/stderr), и как только вы попытаетесь запустить исполняемый файл, он фактически запускает службу и возвращается вам.

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

Ответ 2

Вот действительно хороший пример в msdn здесь

Это проект сервисной плиты С++, который имеет функцию самонастройки/удаления и регистрирует события запуска и остановки службы в журнале событий Windows. Его можно остановить и запустить через приложение служб (snapin), как и другие сервисы. Возможно, вы захотите сначала предоставить ему права LocalSystem, чтобы увидеть, как он работает, так как на xp по крайней мере у него недостаточно прав для начала с предоставленными проектом правами LocalService. Проект Visual Studio 2008 в противном случае исходит из коробки, несмотря на загруженные инструкции, подразумевающие в противном случае.

Немного поздно, но я надеюсь, что это поможет кому-то другому.

Ответ 4

Простейшим решением может быть создание нового проекта службы Windows в Visual Studio и копирование кода в новый проект.

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

Ответ 5

Вы можете настроить приложение для запуска в качестве службы с помощью инструмента Srvany, который является частью Windows Resource Kit Resource Kit Tools.

Ответ 6

Srvany позволяет одновременно использовать только одну услугу. Поэтому я пишу свой srvany (sFany), чтобы nginx и php-cgi выполнялись как службы Windows вместе. Вот источник https://github.com/stxh/sFany