Преобразовать программу C++ в службу Windows?

99% случаев это - один контейнерный экземпляр на приложение. Обычно Вы инициализируете его в Application_Start (для веб-приложения), как это .

После этого, это действительно до потребителя контейнера. Например, некоторые платформы, как Монорельсовая дорога и ASP.NET MVC позволяет Вам прерывать создание экземпляров (контроллеры в этом случае), таким образом, Вы просто регистрируете контроллеры и их зависимости в контейнере и вот именно, каждый раз, когда Вы получаете запрос, контейнер заботится о введении каждого контроллера с его зависимостями. Посмотрите, например этот контроллер MVC ASP.NET . В этих платформах Вы почти никогда не должны называть или даже ссылаться на контейнер в своих классах, который является рекомендуемым использованием.

Другие платформы не позволяют Вам войти в процесс создания легко (как Веб-формы), таким образом, необходимо обратиться к взломам как этот , или получение по запросу необходимые зависимости (то есть, явно назвав контейнер). Для получения по запросу зависимостей используйте статический шлюз для контейнера как этот или тот, описанный maxnk. Обратите внимание путем выполнения этого, фактическое использование контейнера как услуга Локатор который не разъединяет вещи, а также инверсию управления. (см. различие здесь и здесь )

Hope это очищает Ваши сомнения.

17
задан TylerH 25 August 2017 в 16:04
поделиться

4 ответа

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

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

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

17
ответ дан 30 November 2019 в 13:05
поделиться

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

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

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

2
ответ дан 30 November 2019 в 13:05
поделиться

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

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

2
ответ дан 30 November 2019 в 13:05
поделиться

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

1
ответ дан 30 November 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: