Сервисы в Delphi на чистом APIDelphi , Программа и Интерфейс , Процессы и СервисыАвтор: Павел Часть 1. Основные понятия Вот так получилось нужно было по работе написать сервис но не хотелось пользоваться классами Delphi, так как код написанный с применением оных большой, а хотелось чего-нибудь поменьше, то есть на API, но к сожелению видно этим никто не занимался в Delphi (примеров на Си более чем достаточно), вот и родилась идея этого обзора. Что же это сервис(еще их называют службами)??? Попробую рассказать как умею... В любой операционной системе, нужны программы которые работают в фоновом режиме (это нужно например для различных серверов СУБД, сетевые приложения, программ мониторинга следящих за чем то и т.д. и т.п), в Unix-системах такие программы называются демонами, в DOS они назывались TSR (Terminate and Stay Resident). В NT и 2000(далее я буду называть их только для NT, что подразумевает под сообой и 2000) Windows такие программы называются сервисами (или службами).Сервис NT (Windows NT service) - процесс, обладающий специальным интерфейсом для взаимодействия с операционной системой Windows NT. Сервисы бывают двух типов - сервисы Win32, взаимодействующие с операционной системой посредством диспетчера управления сервисами (Service Control Manager - SCM), и драйвера, работающие по протоколу драйвера устройства Windows NT. Я буду рассказывать только про сервисы Win32. Сервисы доступны в панели управления. Запустив Service Applet, вы увидите список доступных сервисов. Вы можете запускать, останавливать, ставить сервисы на паузу. Нажав кнопку Startup, Вы можете изменить поведение сервиса при запуске. Сервисы могут запускаться автоматически при старте компьютера, быть абсолютно выключеными или иметь возможность запуска вручную. Если сервис запускается вручную, то пользователь может указать параметры запуска. Для управления сервисами Вам нужны права администратора или права power user. ОС использует много сервисов и информацию о каждом из них пишет в реестр в ключ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services".Там содержатся следующие сведения: Тип службы Указывает на то, реализован ли в данной программе только один сервис (эксклюзивный) или же их несколько. Эксклюзивный сервис может работать в любом контексте безопасности. Несколько сервисов внутри одного приложения могут работать только в контексте LocalSystem. Способ запуска Автоматический - сервис запускается при старте системы. По требованию - сервис запускается пользователем вручную. Деактивированный - сервис не может быть запущен. Имя исполняемого EXE-файла Порядок запуска по отношению к другим сервисам. В некоторых случаях для корректной работы сервиса требуется, чтобы был запущен один или несколько других сервисов. В этом случае в реестре содержится информация о сервисах, запускаемых перед данным сервисом. Контекст безопасности Здесь хранится сетевое имя и пароль. По умолчанию контекст безопасности соответствует LocalSystem. Любая программа, имеющее соответствующие права, может взаимодействовать с сервисом. Это подразумевает изменение состояния сервиса (Вы можете изменить состояния сервиса используя Service Applet), то есть перевод его в одно из трех состояний - активный (сервис работает), приостоновленный (работа сервиса приостановлена), полная остановка и осуществляется при помощи посылки запросов SCM. Запросы бывают трех типов:
Для управления сервисом необходимо в первую очередь получить дескриптор с помощью функции OpenService. Функция StartService запускает сервис. Изменение состояния сервиса производится вызовом функции ControlService. С помощью определенных функций вы можете изменить информацию о сервисе, тем самым и в реестре. OpenSCManager, CreateService, OpenService, CloseServiceHandle - для создания (открытия) сервиса. QueryServiceConfig, QueryServiceObjectSecurity, EnumDependentServices, EnumServicesStatus - для получения информации о сервисе. ChangeServiceConfig, SetServiceObjectSecurity, LockServiceDatabase, UnlockServiceDatabase, QueryServiceLockStatus - для изменения конфигурационной информации сервиса. В принципе как было сказано сервис - это в принципе обычный exe-файл поддерживающий интерфейс SCM, только имеющий определенное строение. Для того чтобы стать сервисом программа должна быть построена соответствующим образом(т.е. иметь набор определенных функций). В следующей части я подробно расскажу об этом. Описание функций для работы с сервисами (постепенно будут добавлены описания для всех функций), большая часть из них объявлена в WinSvc.Pas.
Также при написание сервиса используются такие структуры(описания их то же постепенно будут добавлятся).
Но вот и все для основных понятий...Вообще сервисы довольно сильно облегчают жизнь программисту, и понимание их работы (даже не используя) полезны, не только программистам, но и системным администраторам и пользователям. В статье использованы материалы из Microsoft SDK(Эта статья входит в рамки проекта DSDN). С удовольствием выслушаю все комментария и замечания по поводу данной статьи. Сразу хочу предупредить, я не отвечаю на письма где меня просят выслать что либо или будет ли продолжение(и подобные письма не несущие какой-то содержательной части), я их читаю, но отвечать на них у меня времени нет. Также , если кто обнаружит неточности, да и просто грамматические ошибки в статье, за это прошу заранее извинение.
Желаю удачи в темных делах В этой статье описывается создание сервисов в Delphi на чистом API без использования классов Delphi, для автоматического запуска программ в фоновом режиме. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Процессы и Сервисы ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |