プログラムの実行を待機するサービスを作成しようとしています。
たとえば、iTunes.exe を実行すると、サービスは「iTunes.exe が開始されました」というメッセージ ボックスを表示するようなことを行います。
これを達成する唯一の方法は、プロセスのリストを定期的に取得し、待機しているプロセスがすでに開始されているかどうかを確認することです。
while(Process.GetProcesses().All(p=>p.ProcessName.ToLower() != "itunes.exe"){
Thread.Sleep(2000);
}
//Do Something!
編集:
より良い解決策は、Windows Management Instrumentation サービスにクエリを実行し、新しいプロセスを監視することです。
// Run this in another thread and make sure you dispose the event watcher before exit
var start = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
start.EventArrived += new EventArrivedEventHandler(delegate (object sender, EventArrivedEventArgs e) {
Console.WriteLine("Name: {0}, Command Line: {1}", e.NewEvent.Properties["ProcessName"].Value, e.NewEvent.Properties["Commandline"].Value);
});
start.Start();