В чем разница между службой Windows и стандартным exe?
Как служба Windows отличается от стандартного exe?
Ответ 1
Служба Windows всегда запускается после запуска компьютера (при условии, что он настроен). Стандартный EXE запускается только при входе пользователя в систему и останавливается, если пользователь выходит из системы.
Вы использовали бы службу Windows для вещей, которые всегда нужно запускать, даже если никто не вошел в систему.
Вы бы использовали стандартный EXE для программ, которые пользователь будет запускать во время входа в систему.
Ответ 2
Служба Windows имеет специальную функцию ServiceMain
и должна правильно отвечать на команды диспетчера управления службами (SCM), чтобы функционировать как сервис. С другой стороны, обычный исполняемый файл имеет функцию main
или WinMain
и не требует ответа на какие-либо конкретные команды управления.
Ответ 3
Если вы говорите о реализации фоновой операции, вот критерии, которые я бы рекомендовал выбрать для службы или без окна .exe:
Выберите exe, если:
- Вам нужно, чтобы он запускался для каждого пользователя и только когда пользователь регистрировался
- Вам нужно, чтобы он взаимодействовал с рабочим столом Windows (значки уведомлений и т.д.).
- Ему нужны все привилегии вошедшего в систему пользователя (не более, не менее)
Выберите услугу, если:
- Возможно, потребуется запустить, когда никто не зарегистрировался
- Как правило, пользователям не нужны данные или привилегии
- Он общается исключительно с сетью
- Он должен раскрывать новые "защищаемые" объекты. Объекты, которые имеют свои собственные декларативные списки контроля доступа (DACL), которые ограничивают доступ к определенным учетным записям/группам.
- Ему нужны специальные разрешения, которые могут быть недоступны для зарегистрированного пользователя.
Службы могут легко быть дырами в области безопасности, поэтому предпочитайте использовать .exe для служб. Иногда вам нужны оба. Средство проверки вирусов должно иметь доступ к каждому файлу файловой системы (который может не выполнить текущий пользователь), но он также должен предоставлять информацию пользователю в виде диалоговых окон/всплывающих окон и инструмента иконка панели задач. Сервисы не могут напрямую взаимодействовать с пользовательским графическим интерфейсом. Они могут использовать стандартные службы Windows IPC (межпроцессные коммуникации), такие как каналы и области общей памяти. Такие инструменты обычно имеют как службу, так и автономный файл без окна .exe, который взаимодействует с сервисом с использованием труб Windows или разделяемых областей памяти.
Получите "Программирование безопасности Windows" Кейта Брауна, если вы хотите погрузиться в эти темы.
Ответ 4
Служба (обычно) является стандартным exe без пользовательского интерфейса. Он может работать даже тогда, когда на компьютере не зарегистрирован пользователь, а права доступа и вид файловой системы зависят от того, что пользователь зарегистрировал.
Ответ 5
С точки зрения двоичного файла EXE и с точки зрения библиотеки компилятора C служба Windows выглядит точно так же, как стандартная программа Unix или консольная программа Windows. т.е. с точкой входа main()
. Что отличает сервис от того, как он загружается/вызывается Microsoft Windows (из реестра, как правило, при загрузке). Служба может (и должна) сообщать приложению SC.exe [Service Control Manager] через вызовы Windows API, что служба запущена, остановлена, приостановлена и т.д.