Реферат: Программирование служб: подробности

Это очень большая тема, про которую я очень мало знаю. Но она имеет прямое отношение к службам, если вы хотите заниматься их разработкой, вам (и мне, естественно) придется с ней разобраться.

Event Log

Интерактивность – это нехорошо. Но служба должна каким-то образом сообщать администратору об ошибках и других важных событиях. Службам, генерирующим несколько десятков (или больше) сообщений в день, целесообразно использовать для этого файлы в формате какой-нибудь СУБД. Для остальных лучшее решение – Event Log. Он достаточно гибок, стандартен, администратор может просмотреть его утилитой Event Viewer.

ПРИМЕЧАНИЕ

Event Log может использоваться любым приложением. Поскольку статья посвящена службам, я использую слово «служба».

Возможности Event Log-а не исчерпываются тем, что описано в этом разделе, но обычно ничего большего и не требуется. Если вам нужно больше, советую обратиться к уже упоминавшейся книге Джеффри Рихтера и Джейсона Кларка «Программирование серверных приложений в Windows 2000» или к MSDN.

Если вы хотите записать сообщение в Event Log, нужно:

создать файл сообщений (при разработке службы);

зарегистрировать в реестре новый источник сообщений (при инсталляции);

собственно записать сообщение.

Файл сообщений

Файл сообщений – это exe- или dll-файл, содержащий ресурс «таблица сообщений». Для получения нужно скомпилировать message compiler’ом (mc.exe) правильно написанный текстовый файл (ниже), получившийся файл ресурсов включить в проект и скомпоновать. Mc.exe не интегрирован в Visual Studio и запускается из командной строки. Ключами можно не пользоваться, достаточно написать «mc filename.mc». На выходе будет filename.h, filename.rc, filenameXXXX.bin (в некоторых случаях несколько штук). filename.rc – тот самый файл ресурсов, он ссылается на filenameXXXX.bin. filename.h содержит идентификаторы сообщений и используется службой.

«Правильно написанный текстовый файл» имеет следующую структуру:

[Заголовок]

сообщение_1

...

сообщение_N

Заголовок необязателен, он может отсутствовать или присутствовать частично. Обычно используется только поле LanguageNames. Синтаксис несложен:

LanguageNames = (обозначение_для_языка_1 = LangID_1 : имя_bin_файла_1)

...

LanguageNames = (обозначение_для_языка_n = LangID_n : имя_bin_файла_n)

«обозначение_для_языка» и «имя_bin_файла» могут быть произвольными, таблица LangID есть в MSDN (смотрите GetLocalInfo()).

Смысл этого поля – перечисление поддерживаемых языков. Если файл сообщений поддерживает несколько языков, в разных локализациях Windows (русской, английской, ...) Event Log будет отображать разные версии сообщений.

Само сообщение выглядит так:

MessageId = 0x1

Severity = Success

Facility = Application

SymbolicName = MSG_COOL_HACK

Language = English

К-во Просмотров: 284
Бесплатно скачать Реферат: Программирование служб: подробности