连接到正在运行的进程以监视其状态

时间:2013-12-16 21:09:37

标签: c# hook windows-process

我是C#挂钩的新手,正在寻找关于在哪里进行研究的一些信息。我想这里有些人可能已经做过这个,之后可能会知道从哪里开始!

我的总体目标很简单 - 如果可能的话,创建一个C#应用程序,它可以在一台机器上搜索当前正在运行的进程,找到一个匹配某个名称(我们可以假设这种情况它是唯一的,只有1个进程那个名字)和“挂钩”进程。目标是观察这个过程被挂断。如果它崩溃,冻结,或者通常有窗户能够检测到的任何不良健康事件,我希望能够找到它。然后,根据它看到的东西,它做其他的东西。

我能够使用Pai Mei在Python 2.7中做类似的事情,但是这个项目早已被抛弃,近年来我变得非常喜欢C#。

所以:这听起来像是C#中的可能吗?如果是这样,有没有人有一个很好的建议,我可以在哪里找到一些信息?最后,是否有人有一些示例代码,他们可能愿意分享这个主题? = d

谢谢!

1 个答案:

答案 0 :(得分:1)

ManagementEventWatcher可能对您有所帮助。但是,复杂性将取决于您如何编写或调整WMI查询。

我没有以下代码,并且从某个地方被删除了。

using System;
using System.Management;

class Process {
  public static void Main() {
    ManagementEventWatcher startWatch = new ManagementEventWatcher(
      new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
    startWatch.EventArrived += new EventArrivedEventHandler(startWatch_EventArrived);
    startWatch.Start();
    ManagementEventWatcher stopWatch = new ManagementEventWatcher(
      new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
    stopWatch.EventArrived += new EventArrivedEventHandler(stopWatch_EventArrived);
    stopWatch.Start();
    Console.WriteLine("Press any key to exit");
    while (!Console.KeyAvailable) System.Threading.Thread.Sleep(50);
    startWatch.Stop();
    stopWatch.Stop();
  }

  static void stopWatch_EventArrived(object sender, EventArrivedEventArgs e) {
    Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value);
  }

  static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) {
    Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value);
  }
}