0

私は C# フッキングが初めてで、どこで調査を行うべきかについて少し情報を探しています。ここには、以前にこれを行ったことがあり、どこから始めるべきかについて良い考えを持っている人がいると思いました!

私の全体的な目標は単純です。可能であれば、マシン上で現在実行中のプロセスを検索して、特定の名前に一致するプロセスを検索できる C# アプリケーションを作成することです (この状況では、そのプロセスは一意であり、その名前のプロセスは 1 つだけであると想定できます)。プロセスに「フック」します。目標は、そのプロセスが停止するのを監視することです。クラッシュ、フリーズ、または一般的に Windows が検出できる健康上の問題がある場合は、それについて調べたいと思います。次に、見たものに基づいて、他のことを行います。

Pai Mei を使用して Python 2.7 で同様のことを行うことができましたが、そのプロジェクトは長い間放棄されており、近年では C# が好きになっています。

では、これは C# で可能なことのように聞こえますか? もしそうなら、誰かがそれに関する情報をどこで見つけることができるかについて良い提案をしていますか? 最後に、このトピックについて共有したいと思われるサンプル コードを誰かが持っていますか? =D

ありがとうございました!

4

1 に答える 1

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);
  }
}
于 2013-12-16T21:36:46.407 に答える