Чем служба Windows отличается от стандартного исполняемого файла?

В чем разница между службой Windows и стандартным исполняемым файлом?


person LearningCSharp    schedule 24.01.2010    source источник
comment
Это также очень хороший пост.   -  person Monika X    schedule 15.09.2015


Ответы (5)


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

Вы бы использовали службу Windows для вещей, которые всегда нужно запускать, даже если никто не вошел в систему.

Вы бы использовали стандартный EXE для программ, которые пользователь будет запускать во время входа в систему.

person Eric J.    schedule 24.01.2010
comment
Но чем он отличается от использования Планировщика заданий для запуска процесса (в изолированном сеансе) и установки триггера на при запуске компьютера? Также можно настроить запуск службы только вручную. - person Kasia Gauza; 09.03.2019

Служба Windows имеет специальную функцию ServiceMain и должна правильно реагировать на команды диспетчера управления службами (SCM), чтобы функционировать как служба. С другой стороны, обычный исполняемый файл имеет функцию main или WinMain и не должен реагировать на какие-либо конкретные команды управления.

person Greg Hewgill    schedule 24.01.2010
comment
Технически правильно, но я не думаю, что это очень хорошо отвечает на вопрос. (См. ответ Эрика Дж.). - person Ash; 24.01.2010
comment
Ответы Грега и Эрика работают, но я могу отметить только один как правильный :-( - person LearningCSharp; 24.01.2010
comment
Я определенно думаю, что это гораздо более правильный ответ, чем тот, который был выбран. Другой лучше отвечает на вопрос Что такое служба Windows. - person Francisco Zarabozo; 07.04.2013

Если вы говорите о реализации фоновой операции, вот критерии, по которым я бы рекомендовал выбрать службу или безоконный .exe:

Выберите исполняемый файл, если:

  • Вам нужно, чтобы он работал для каждого пользователя и только тогда, когда пользователь вошел в систему.
  • Он нужен для взаимодействия с рабочим столом Windows (значки уведомлений и т. д.)
  • Нужны все привилегии вошедшего в систему пользователя (ни больше, ни меньше)

Выбирайте услугу, если:

  • Может потребоваться запуск, когда никто не вошел в систему
  • Обычно ему не нужны данные или привилегии для каждого пользователя.
  • Он общается исключительно с сетью
  • Ему необходимо предоставить новые «защищаемые» объекты. Объекты, имеющие собственные списки декларативного контроля доступа (DACL), которые ограничивают доступ к определенным учетным записям/группам.
  • Для этого требуются специальные разрешения, которые могут быть недоступны вошедшему в систему пользователю.

Службы легко могут быть дырами в безопасности, поэтому предпочитайте .exe службам. Иногда вам понадобятся оба. Средство проверки на вирусы должно иметь доступ к каждому файлу в файловой системе (что может быть недоступно текущему пользователю), но оно также должно предоставлять информацию пользователю в виде диалоговых окон/всплывающие уведомления и инструмент иконка панели задач. Службы не могут напрямую взаимодействовать с графическим интерфейсом пользователя. Они могут использовать стандартные службы Windows IPC (межпроцессное взаимодействие), такие как каналы и области общей памяти. Такие инструменты обычно имеют как службу, так и исполняемый файл .exe без окон для каждого пользователя, который взаимодействует со службой с помощью конвейеров Windows или областей общей памяти.

Получите «Программирование безопасности Windows» Кита Брауна, если вы хотите погрузиться в эти темы.

person David Gladfelter    schedule 24.01.2010
comment
Незначительная мелочь: буква D в DACL означает Discretionary. - person Greg Hewgill; 24.01.2010
comment
Он взаимодействует исключительно с сетью. Это неверно, службы могут делать много других вещей, кроме доступа к сети. - person Ash; 24.01.2010
comment
Не все службы Win32/64 взаимодействуют исключительно с сетью, но все демоны, которым требуется только связь с сетью, почти всегда лучше всего реализовать как службы при программировании на Win32/64. Я хотел, чтобы этот список описывал сценарии, в которых службы имеют смысл, а не ограничивал каждый вариант использования служб Windows. - person David Gladfelter; 24.01.2010

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

person John Knoeller    schedule 24.01.2010
comment
Не на 100% точно. Служба должна соответствовать некоторым дополнительным требованиям, помимо стандартного исполняемого файла без пользовательского интерфейса. - person Eric J.; 24.01.2010
comment
да, некоторые требования и другой API, к которому у него есть доступ, но все же стандартный EXE. - person John Knoeller; 24.01.2010
comment
Разве у службы агента SQL Server нет интерфейса светофора? Это услуга, если я не ошибаюсь? - person LearningCSharp; 24.01.2010
comment
пользовательский интерфейс для службы обычно представляет собой отдельный процесс, который взаимодействует со службой через частный канал. - person John Knoeller; 24.01.2010
comment
Еще одна вещь, о которой стоит упомянуть, заключается в том, что служба запускается от имени конкретного пользователя, как это делает переносимый исполняемый файл (exe). По умолчанию большинство служб работают от имени локального пользователя SYSTEM, но приложения могут создать своего собственного пользователя, чтобы контролировать доступ к ресурсам. - person Kirkland; 01.03.2019

С точки зрения EXE-файла и библиотеки C компилятора служба Windows выглядит точно так же, как стандартная программа Unix или консольная программа Windows. то есть с точкой входа main(). Что отличает службу, так это то, как она загружается/вызывается Microsoft Windows (из реестра, обычно при загрузке). Служба может (и должна) сообщать приложению SC.exe [Service Control Manager] через вызовы Windows API, что служба запущена, остановлена, приостановлена ​​и т. д.

person unixman83    schedule 28.09.2011