Delphi вики
Advertisement



Свойства Служб

Название Описание
Name это основное имя службы, должно быть уникальным в системе, так что его обязательно нужно сменить на что-либо другое. Под этим именем мы будем регистрироваться в реестре, под этим именем будем писать логи, с этим именем будем оперировать, общаясь со службой программно, и т.п. В имени службы рекомендуется использовать только латинские буквы и цифры.
DisplayName Это читабельное название службы. Именно оно отображается в оснастке "Службы". Это та строка, которую обычно видит пользователь (системный администратор). Если оно не задано, то вместо него берётся имя службы из свойства Name. Для службы можно задать более подробное описание, но в Delphi нет подходящего свойства, поэтому задание описания надо будет сделать руками (см. пункт 8).
AllowPause, AllowStop говорят сами за себя: можно ли приостанавливать и останавливать службу соответственно. Отвечают за доступность соответствующих кнопок в оснастке "Службы". Если вы назначите соответствующие обработчики событий (см. ниже), то эти свойства автоматически переключатся в True. Заметим, что эти свойства не влияют на возможность отправки сообщений вашей службе. Т.е. даже, если вы указали AllowPause = False, никто не запрещает стороннему приложению отправить вашей службе сообщение приостановки SERVICE_CONTROL_PAUSE.
StartType тип запуска службы по умолчанию. Имеет значение только при установке службы. В остальное время не используется. Отвечает только за то, какой тип запуска будет у вашей службы при её самоустановке. Имеет смысл менять значения только на Auto (автоматический запуск при старте системы), Manual (запуск только по требованию, например, по указанию пользователя или во время запуска зависимой службы) и Disabled (запуск запрещён). Остальные имеют смысл только для драйверов. Ещё раз заметим, что независимо от типа запуска, при самоустановке служба добавляется в остановленном состоянии.
ServiceStartName и Password имя учётной записи пользователя и её пароль для запуска службы из-под неё. Обычно оставляют пустыми - в этом случае служба пускается из-под учётной записи LocalSystem. Аналогично StartType, эти свойства используются только во время самоустановки службы. Служба, работающая под LocalSystem, по умолчанию может свободно выполнять операции, обычно запрещённые для других учётных записей. Заметим, что при работе из-под LocalSystem, службе не следует обращаться к ключу реестра HKEY_CURRENT_USER (да и вообще, работа с любыми объектами пользователя из службы часто оказывается плохой идеей). Кроме того, нужно быть аккуратным с разделом HKEY_CLASSES_ROOT, т.к. это виртуальный раздел, часть которого берётся из профиля текущего пользователя (HKEY_CURRENT_USER), а часть - из общесистемного (HKEY_LOCAL_MACHINE).
ErrorSeverity насколько серьёзны сбои в службе. Ignore - пользователя не уведомлять, в журнал не заносить; Normal (по умолчанию) - уведомить пользователя, занести событие в журнал; Severe - если последняя удачная конфигурация еще не используется, загружается именно эта конфигурация. Если она уже используется, загрузка продолжается; Critical - если последняя удачная конфигурация еще не используется, загружается именно эта конфигурация. Если она уже используется, загрузка останавливается и выдаётся синий экран смерти.
Interactive сервис может взаимодействовать с интерфейсом пользователя: может выводить на консоль окна и принимать ввод от пользователя (так называемые "интерактивные" службы). Не рекомендуется устанавливать в True. Более того, в Windows Vista интерактивные службы запрещены по умолчанию. Интерактивный процесс может быть запущен только из-под учётной записи LocalSystem (при установке свойства в True автоматически сбрасываются свойства ServiceStartName и Password и наоборот).
LoadGroup и Dependencies используются для указания порядка загрузки, если это важно для вашей службы. В "LoadGroup" вписывается имя группы, в которую будет входить ваша служба (если будет). Примеры можно посмотреть в реестре: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder. Т.е. фактически тут определяется, ДО каких служб должна быть запущена ваша служба. Если вы, к примеру, впишете туда "NetBIOSGroup", то службы, зависящие от "NetBIOSGroup" будут ожидать загрузки вашей службы (на самом деле, всё немного сложнее, но не будем на первый раз слишком сильно углубляться в подробности). "Dependencies" же определяет, какие службы должны быть запущены до вас. При добавлении в список зависимости вы должны указывать свойство IsGroup - является ли имя, введённое в Name, именем группы или же это имя службы. Зависимость от группы трактуется следующим образом: будет произведена попытка запуска каждой службы из группы. Ваша служба будет запущена, если хотя одна служба из указанной группы оказалась запущенной. Такая вот весьма странная логика запуска.
Advertisement