Регистрация запуска новых процессов
От: pus  
Дата: 21.03.04 17:10
Оценка:
Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.
Re: Регистрация запуска новых процессов
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.03.04 17:32
Оценка:
Здравствуйте, pus, Вы писали:

pus>Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.


Следить за процессами можно только на низком уровне. Это тебе скорее нужно идти в форума по ВинАПИ...
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Регистрация запуска новых процессов
От: Аноним  
Дата: 21.03.04 17:49
Оценка:
Здравствуйте, pus, Вы писали:

pus>Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.


здесь
Re[2]: Регистрация запуска новых процессов
От: pus  
Дата: 22.03.04 05:36
Оценка:
За линк спасибо. Буду разбираться. Но вот что непонятно: ведь есть в System.Diagnistics простые средства, чтобы запустить или остановить процесс. Неужели нет дотнетовских средств, чтобы реагировать на изменения в списке запущенных процессов? Задачка то достаточно простая. Неужели не обойтись без WinAPI?
Re: Регистрация запуска новых процессов
От: TK Лес кывт.рф
Дата: 22.03.04 08:49
Оценка:
Здравствуйте, pus, Вы писали:

pus>Как сделать, чтобы приложение реагировало на запуск новых процессов и остановку уже запущенных? К примеру, при запуске процесса "notepad" обработчик должен выполнять определенные действия. Я смотрел, какие события есть в System.IO и System.Diagnostics, но чего-то не обнаружил нужного.


Смотреть нужно на WMI классы. в частности Win32_Process — достаточно просто следить за созданием новых экземпляров.

Например, как это делается на VBS.
Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'" 
Set EventSource = GetObject("winmgmts:\\.\root\cimv2").ExecNotificationQuery (Query)

While true
   Set NTEvent = EventSource.NextEvent
   WScript.Echo NTEvent.TargetInstance.Name
Wend


PS
Так-же может пригодится утилита MgmtClassGen.exe из Framework SDK
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Регистрация запуска новых процессов
От: pus  
Дата: 23.03.04 09:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>здесь


Благодарю, получилось! Но только для регистрации запуска Notepad. Но вот не пойму, как регистрировать остановку процессов Notepad. Следить за идентификаторами процессов мне не нужно — достаточно отреагировать на событие, когда последний из работающих ноутпадов закрывается. Надо, как я понимаю, всего лишь изменить в Вашем линке строку запроса:

string QUERY_WATCHER = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'";


Но не знаю как. Подскажите, что нужно поставить вместо __InstanceCreationEvent? И, вообще, где почитать про составление таких запросов? В MSDN порылся — не нашел.
Re[3]: Регистрация запуска новых процессов
От: TK Лес кывт.рф
Дата: 23.03.04 09:35
Оценка:
Здравствуйте, pus, Вы писали:

pus>
pus>string QUERY_WATCHER = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'";
pus>


pus>Но не знаю как. Подскажите, что нужно поставить вместо __InstanceCreationEvent? И, вообще, где почитать про составление таких запросов? В MSDN порылся — не нашел.



__InstanceDeletionEvent (в MSDN все это есть)
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Регистрация запуска новых процессов
От: pus  
Дата: 23.03.04 09:41
Оценка:
Здравствуйте, TK, Вы писали:

TK>Смотреть нужно на WMI классы. в частности Win32_Process — достаточно просто следить за созданием новых экземпляров.


TK>Например, как это делается на VBS.

TK>
TK>Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'" 
TK>Set EventSource = GetObject("winmgmts:\\.\root\cimv2").ExecNotificationQuery (Query)

TK>While true
TK>   Set NTEvent = EventSource.NextEvent
TK>   WScript.Echo NTEvent.TargetInstance.Name
TK>Wend
TK>



Благодарю, c регистрацией запуска новых процессов я разобрался. Но вот не пойму, как регистрировать остановку запущенных. Проблема в составлении запроса, аналогичного Вашему:

Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"


Как его изменить? Что нужно поставить вместо __InstanceCreationEvent?
Re[3]: Регистрация запуска новых процессов
От: TK Лес кывт.рф
Дата: 23.03.04 09:45
Оценка:
Здравствуйте, pus

pus>Благодарю, c регистрацией запуска новых процессов я разобрался. Но вот не пойму, как регистрировать остановку запущенных. Проблема в составлении запроса, аналогичного Вашему:


pus>
pus>Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"
pus>


pus>Как его изменить? Что нужно поставить вместо __InstanceCreationEvent?


http://www.rsdn.ru/Forum/Message.aspx?mid=578870&amp;only=1
Автор: TK
Дата: 23.03.04


Так-же есть:
__InstanceModificationEvent
__InstanceOperationEvent
__InstanceDeletionEvent
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Регистрация запуска новых процессов
От: pus  
Дата: 23.03.04 09:45
Оценка:
Здравствуйте, TK, Вы писали:

TK>__InstanceDeletionEvent (в MSDN все это есть)


Спасибо! А остальное в запросе менять не нужно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.