Форум: "Corba";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];
ВнизКак прочитать сгенерированное сообщение по останову сервиса Найти похожие ветки
← →
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 вся ветка
Форум: "Corba";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c