Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.27;
Скачать: CL | DM;

Вниз

Как прочитать сгенерированное сообщение по останову сервиса   Найти похожие ветки 

 
AbrosimovA ©   (2006-05-24 15:18) [0]

Ниже представлен код регистрации постоянного потребителя событий:


//подключение к пространству имён
objService := GetObject("winmgmts:\\.\Root\CIMV2");

//создание экземпляра класса EventViewerConsumer (потребитель событий)
objConsumer := objService.Get("EventViewerConsumer").SpawnInstance_();
//установка свойств потребителя событий
objConsumer.Name := "ServiceStopped";
objConsumer.Description:="Service was stopped";
objConsumer.Severity:=1;
//запись потребителя событий
objConsumer.Put_;

//создание экземпляра класса __EventFilter (фильтр событий)
objFilter := objService.Get("__EventFilter").SpawnInstance_();
//установка свойств фильтра событий
objFilter.Name := "ServiceStoppedEvent";
objFilter.QueryLanguage := "WQL";
objFilter.Query := "SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance isa ""Win32_Service"" AND TargetInstance.State=""Stopped""";
//запись фильтра событий
objFilter.Put_;

//******************************************************************************** ******************
objFilter := objService.Get("__EventFilter.Name=""ServiceStoppedEvent""");
objConsumer := objService.Get("EventViewerConsumer.Name=""ServiceStopped""");
//создание экземпляра класса __FilterToConsumerBinding (связка)
objBinding := objService.Get("__FilterToConsumerBinding").SpawnInstance_();
//установка свойств связки
objBinding.Filter := objFilter.Path_.RelPath;
objBinding.Consumer := objConsumer.Path_.RelPath;
//запись связки
objBinding.Put_;


Так


procedure WaitForEvent;
var colServices: OleVariant;
   objEvent: OleVariant;
begin
colServices := objService.ExecNotificationQuery(objFilter.Query);
objEvent := colServices.NextEvent;
Form1.Caption:=objEvent.TargetInstance.Name;
VarClear(objEvent);
VarClear(colServices);
end;


я пытался читать данные события по останову любого из сервисов. Всё работает, но ..... форма становится недоступной из-за ожидания события на выделенной жирным шрифтом строке. Бьюсь с этим неделю: пробовал создавать отдельный поток, но не помогает.
Как мне ожидать сообщения без "зависания формы и её элементов"?


 
umbra ©   (2006-05-24 19:13) [1]

можно следить за событиями асинхронно. вместо ExecNotificationQuery надо будет использовать ExecNotificationQueryAsync и создать еще один объект - контейнер для уведомлений. Подробности -
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/receiving_asynchronous_event_notifications.asp

но вообще-то отдельный поток для слежения за событиями должен помочь


 
AbrosimovA ©   (2006-05-25 08:43) [2]

Большое спасибо! Получилось.



Страницы: 1 вся ветка

Текущий архив: 2008.07.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
15-1212841734
Поросенок Винни-Пух
2008-06-07 16:28
2008.07.27
как бы сделали вы?


15-1213095081
Res
2008-06-10 14:51
2008.07.27
текст с картинки


1-1195929273
SkyN
2007-11-24 21:34
2008.07.27
парсинг строки "Attr1=Val1; Attr2=Val2; Attr3=Val3"


15-1212834620
Kostafey
2008-06-07 14:30
2008.07.27
С днем рождения ! 7 июня


15-1212906039
vrem
2008-06-08 10:20
2008.07.27
Подскажите главу