重複の可能性:
Windows で開始されたアプリケーションを追跡する
ユーザーが Excel や Access などの特定のアプリケーションをいつ起動するかを監視するプログラムまたはサービスを C# で作成するのが好きです。System.Diagnostics.Process を使用すると、実行中のプロセスを取得できますが、ユーザーがアプリケーションを起動したときにイベントを監視したいと考えています。何らかの使用履歴を作成したいと考えています。
重複の可能性:
Windows で開始されたアプリケーションを追跡する
ユーザーが Excel や Access などの特定のアプリケーションをいつ起動するかを監視するプログラムまたはサービスを C# で作成するのが好きです。System.Diagnostics.Process を使用すると、実行中のプロセスを取得できますが、ユーザーがアプリケーションを起動したときにイベントを監視したいと考えています。何らかの使用履歴を作成したいと考えています。
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個の最新プロセスの配列を監視し、変更時にイベントを呼び出します
最も簡単な方法は、実行中のプロセスを定期的に確認し、前のリストと比較することです。
ただし、プロセスの開始時に通知を受け取ることができます。ドキュメントはこちら:
また、セキュリティ イベント ログで「詳細な追跡」を有効にすることもできます。これにより、システムで開始および終了したすべてのプロセスが表示されます。それは多すぎるかもしれませんが。