Если вы ищете только PID / Имя ваших процессов, вы можете вместо этого выбрать события Win32_ProcessTrace, используя WQL-запрос, такой как «SELECT * FROM Win32_ProcessTrace WHERE TargetInstance.ProcessName = 'name'" если применимо *.
Подводный камень использования «SELECT * FROM __InstanceModificationEvent В ТЕЧЕНИИ 10 ГДЕ TargetInstance ISA« Win32Process »И TargetInstance.Name = 'name'» заключается в том, как он работает на серверной части. Если вы проверите wbemess.log в вашем каталоге% windir% \ system32 \ wbem \ logs, вы заметите следующие журналы (используя __InstanceDeletionEvent):
(Wed Jul 22 13:58:31 2009.73889577) : Registering notification sink with query select * from __InstanceDeletionEvent within 10 where TargetInstance ISA 'Win32_Process' in namespace //./root/CIMV2.
(Wed Jul 22 13:58:31 2009.73889577) : Activating filter 047209E0 with query select * from __InstanceDeletionEvent within 10 where TargetInstance ISA 'Win32_Process' in namespace //./root/CIMV2.
(Wed Jul 22 13:58:31 2009.73889577) : Activating filter 0225E560 with query select * from __ClassOperationEvent where TargetClass isa "Win32_Process" in namespace //./root/CIMV2.
(Wed Jul 22 13:58:31 2009.73889577) : Activating filter 'select * from __ClassOperationEvent where TargetClass isa "Win32_Process"' with provider $Core
(Wed Jul 22 13:58:31 2009.73889587) : Activating filter 'select * from __InstanceDeletionEvent within 10 where TargetInstance ISA 'Win32_Process'' with provider $Core
(Wed Jul 22 13:58:31 2009.73889587) : Instituting polling query select * from Win32_Process to satisfy event query select * from __InstanceDeletionEvent within 10 where TargetInstance ISA 'Win32_Process'
(Wed Jul 22 13:58:31 2009.73889587) : Executing polling query 'select * from Win32_Process' in namespace '//./root/CIMV2'
(Wed Jul 22 13:58:31 2009.73889697) : Polling query 'select * from Win32_Process' done
(Wed Jul 22 13:58:41 2009.73899702) : Executing polling query 'select * from Win32_Process' in namespace '//./root/CIMV2'
(Wed Jul 22 13:58:41 2009.73899792) : Polling query 'select * from Win32_Process' done
Как вы можете видеть, фактическая реализация события на удаленной машине заключается в выполнении запроса к Win32_Process с интервалом, который указан вашим значением в предложении WITHIN. В результате любые процессы, которые запускаются и останавливаются в этом опросе, никогда не будут вызывать событие.
Вы можете установить для предложения WITHIN небольшое значение, чтобы попытаться минимизировать этот эффект, но лучшим решением будет использование истинного события, такого как Win32_ProcessTrace, которое должно всегда срабатывать.
* Обратите внимание, что MSDN указывает, что для работы Win32_ProcessTrace требуется как минимум Windows XP на клиентском компьютере и Windows 2003 на сервере. Если вы работаете с более старой ОС, вы можете застрять с помощью запроса __InstanceModificationEvent.