3

重複の可能性:
Windows で開始されたアプリケーションを追跡する

ユーザーが Excel や Access などの特定のアプリケーションをいつ起動するかを監視するプログラムまたはサービスを C# で作成するのが好きです。System.Diagnostics.Process を使用すると、実行中のプロセスを取得できますが、ユーザーがアプリケーションを起動したときにイベントを監視したいと考えています。何らかの使用履歴を作成したいと考えています。

4

3 に答える 3

4

WMI を使用して実行できます。

private ManagementEventWatcher WatchForProcessStart(string processName)
{
    string queryString =
        "SELECT TargetInstance" +
        "  FROM __InstanceCreationEvent " +
        "WITHIN  10 " +
        " WHERE TargetInstance ISA 'Win32_Process' " +
        "   AND TargetInstance.Name = '" + processName + "'";

    // The dot in the scope means use the current machine
    string scope = @"\\.\root\CIMV2";

    // Create a watcher and listen for events
    ManagementEventWatcher watcher = new ManagementEventWatcher(scope, queryString);
    watcher.EventArrived += ProcessStarted;
    watcher.Start();
    return watcher;
}

private void ProcessStarted(object sender, EventArrivedEventArgs e)
{
    ManagementBaseObject targetInstance = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
    string processName = targetInstance.Properties["Name"].Value.ToString();
    Console.WriteLine(String.Format("{0} process started", processName));
}

10個の最新プロセスの配列を監視し、変更時にイベントを呼び出します

于 2012-09-10T09:52:55.873 に答える
0

最も簡単な方法は、実行中のプロセスを定期的に確認し、前のリストと比較することです。

ただし、プロセスの開始時に通知を受け取ることができます。ドキュメントはこちら:

また、セキュリティ イベント ログで「詳細な追跡」を有効にすることもできます。これにより、システムで開始および終了したすべてのプロセスが表示されます。それは多すぎるかもしれませんが。

于 2012-09-10T09:52:48.547 に答える