Преобразовать программу C ++ в службу Windows? - PullRequest
17 голосов
/ 12 октября 2009

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

Ответы [ 6 ]

17 голосов
/ 12 октября 2009

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

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

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

4 голосов
/ 21 ноября 2012

На MSDN есть действительно хороший пример

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

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

2 голосов
/ 12 октября 2009

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

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

2 голосов
/ 12 октября 2009

Вы могли бы «обернуть это», используя этот инструмент из CodeProject:

http://www.codeproject.com/KB/system/xyntservice.aspx

Стоит посмотреть.

1 голос
/ 12 октября 2009

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

0 голосов
/ 14 марта 2012

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

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