列出刚刚创建的进程的模块

时间:2014-10-19 12:17:39

标签: c# windows winapi process wmi

编写代码会列出所有新创建的进程的模块,我遇到了一些问题。我知道为什么我不能这样做,但我想知道是否有某种方法。

ManagementEventWatcher start_watch = new ManagementEventWatcher(
    new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")
);
start_watch.EventArrived += new EventArrivedEventHandler(watch_event);
start_watch.Start();

我的代码的前几行使用WQL和类似通知查询的东西来监视新启动的进程。我正在创建一个新的事件处理程序来处理watch_event函数的这些创建。

static void watch_event(object sender, EventArrivedEventArgs e) {
    Process p = Process.GetProcessById((int)(uint)e.NewEvent.Properties["ProcessID"].Value);
    newProcesses.Add(p);
}

watch_event函数本身非常简单,只有一行根据刚创建的进程ID获取Process对象。

我认为自己应该正常工作,所以我在另一行设置断点并开始调试,但它没有按照我的预期工作。

它说没有这样的过程',虽然WMI只是告诉我有 - 它刚刚创建。 为了记录,我还尝试按Process.GetProcesses()列出所有进程,并且我发现每次调用我的事件处理程序时,在返回的集合的末尾都有一个标记为Idle的进程。我无法检索其ID或名称,因为它会抛出Win32Exception

所以这是我的问题:我做错了吗?我是否应该以其他方式收集有关新创建的流程的信息,或者API中是否有一个函数我不知道这是否可以实现?

谢谢。

0 个答案:

没有答案