Служба Windows против приложения Windows - лучшие практики - PullRequest
28 голосов
/ 16 июня 2009

Когда мне следует обратиться за службой Windows и когда мне следует обратиться к «фоновому приложению», которое запускается в области уведомлений?

Если я не ошибаюсь, мое дизайнерское решение будет таким: любое приложение, которое должно быть запущено до входа пользователя в систему, должно быть сервисом. Для всего остального используйте фоновое приложение. Правильно ли мое решение?

Более того, если мне понадобятся «права администратора» для моего фонового приложения, я бы расширил использование манифеста. Есть ли какие-то особые преимущества работы в качестве службы?

Ответы [ 3 ]

23 голосов
/ 16 июня 2009

Мои общие правила таковы:

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

Веселье приходит, когда вам нужно запустить что-то как системную учетную запись, но и взаимодействовать с ней. IIS является хорошим примером этого, это служба, но администрация - это приложение - оно должно быть запущено при запуске, ему нужен доступ к определенным вещам, к которым у пользователя нет нормального доступа (c: \ inetpub), но пользователь должен иметь возможность запускать, останавливать и настраивать его.

5 голосов
/ 16 июня 2009

Я бы разработал приложение как сервис, если приложение имеет критическую цель и никогда не должно (или редко) закрываться. Службы Windows предоставляют хорошие параметры восстановления после сбоя, хорошие уведомления (см. Вкладку восстановления в свойстве службы).

Также хорошей причиной для использования сервисов является то, что они могут работать под любым пользователем (так что если вы Развернув их на сервере, к которому вы подключены, вы можете безопасно выйти из системы после запуска службы, не беспокоясь о том, что приложение тоже закроется).

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

Однако вам не следует злоупотреблять услугами, а использовать их, как я уже сказал, только для циклических приложений.

3 голосов
/ 16 июня 2009

Я считаю, что ваше решение почти правильно, но я бы добавил еще одно условие. Возьмем, к примеру, службу mysqld (в этом случае у вас есть выбор, но большинство людей запускают ее как службу). Он запускается как сервис, потому что вы хотите получить доступ к сервису в любое время через несколько приложений. Важно, чтобы он реагировал на все приложения, обращающиеся к нему, и сам по себе не представлял собой ничего, кроме ожидания обслуживания других приложений.

Просто то, что я тоже учел бы при принятии решения.

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