首页 > 解决方案 > python中的Windows实时进程创建监视器

问题描述

我正在尝试在 Python 中创建一个“实时”进程创建监视器,但无法使其正常工作。

我曾尝试为此使用 WMI,但似乎错过了短暂的生命过程并且从未报告过,我猜我在 Python 中使用的 WMI 技术是基于“轮询”的,这就是我现在所拥有的:

import wmi
c = wmi.WMI()
process_watcher = c.Win32_Process.watch_for("creation")
while True:
    new_process = process_watcher()
    print new_process.Caption

这可行,但如前所述,不适用于短暂的生命过程,我使用了WMIPyMI,它们声称是一种更快的实现,但在两种情况下我得到了相同的结果。

我已经测试了我在网上找到的使用事件而不是轮询的 C# 实现:

var startWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
startWatch.EventArrived += new EventArrivedEventHandler(startWatch_EventArrived);
startWatch.Start();

这工作得更好,有没有办法在 Python 中使用它?我查看了两个 WMI 项目的文档,但无法使其正常工作。

标签: pythonwmi

解决方案


答案在这里:http ://timgolden.me.uk/python/wmi/wmi.html

c = wmi.WMI ()

raw_wql = "SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_Process'"
watcher = c.watch_for (raw_wql=raw_wql)
while 1:
  process_created = watcher()
  print(process_created.Name)

或者

c = wmi.WMI ()

watcher = c.watch_for (
  notification_type="Creation",
  wmi_class="Win32_Process",
  delay_secs=2,
)

while 1:
  process_created = watcher()
  print(process_created.Name)
  print(process_created)

推荐阅读