Главная страница
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.018 c
2-1214232759
User
2008-06-23 18:52
2008.07.27
Поиск файлов


10-1148343170
The Only
2006-05-23 04:12
2008.07.27
Не создаётся excel


2-1214288805
Sergey2
2008-06-24 10:26
2008.07.27
Нажатие кнопки мыши.


15-1213269006
fics
2008-06-12 15:10
2008.07.27
Программы для построения графов


9-1171983109
Kav
2007-02-20 17:51
2008.07.27
smd2v12-src большая модель приводит к Out of memory