В чем разница между службой Windows и обычным приложением? - PullRequest
5 голосов
/ 02 августа 2009

Я только создал обычные приложения Windows (в основном C #). Что отличает службу Windows от обычного приложения Windows? Что отличает их? Что сервис может сделать, что приложение не может? Какие различия видны с точки зрения разработчиков? Как вы создаете один? Это просто для того, чтобы создать обычное приложение (может быть, консольное приложение, так как нет графического интерфейса?) И запустить или установить его особым образом, или это еще не все?

Ответы [ 4 ]

9 голосов
/ 02 августа 2009

Есть пара вещей, которые сразу бросаются мне в глаза.

  • Они работают в совершенно другой консоли, начиная с Vista
  • В результате работы в другой консоли службы не могут взаимодействовать с рабочим столом. Так что по сути нет прямой поддержки пользовательского интерфейса. Обычно вам приходится кодировать одноуровневое приложение пользовательского интерфейса, которое работает как обычная программа и использует некоторый механизм (например, именованные каналы) для взаимодействия со службой.
  • Обычно в любой момент времени может работать только один экземпляр вашей службы.
  • Процессы для каждого пользователя, услуги для рабочей станции и, следовательно, часто предоставляют услуги для нескольких пользователей.
6 голосов
/ 02 августа 2009

Эта страница MSDN приводит к большему количеству документации по их созданию, чем вы могли бы потрясти. Эта страница , возможно, является лучшим введением в них в целом.

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

Службы также не привязаны к выполнению в виде отображения 1: 1 с процессом. Многие сервисы могут существовать в одном процессе, обычно с помощью svchost (посмотрите на них с помощью Process Explorer, чтобы увидеть, как это часто работает). Это сокращает усилия при запуске, поскольку для относительно легких служб несколько процессов не требуется.

Реализация службы в c # довольно проста, эта страница показывает, как в очень простых для понимания терминах.

Обратите внимание, что на самом деле служба в Windows - это немного больше, чем леса в реестре в HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services, который определяет те «пути к изображениям» (в большинстве случаев это просто исполняемые файлы и используемые параметры), которые рассматриваются службы, от которых затем запускается пользователь, от каких других служб они зависят и запускаются ли они при запуске / после запуска или по мере необходимости.

2 голосов
/ 02 августа 2009

Если вы знакомы с Unix, служба Windows похожа на демон Unix. Он не связан с каким-либо конкретным пользователем и всегда работает в фоновом режиме.

0 голосов
/ 02 августа 2009

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

Еще одним преимуществом является то, что вы можете автоматически запускать службы при входе пользователя в систему.

Существуют также методы, которые вы можете переопределить, которые вызываются при запуске / остановке службы (например, из Панели управления | Администрирование | Службы).

В Visual Studio есть специальный тип проекта, который вы можете использовать для его создания. Смотрите сайт ниже для примера: http://www.dotheweb.net/articles/dotnet/services.aspx

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