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