C# - 死活監視

クラウディア 
1. 概要
2. 死活監視

1. 概要

 表題だけでは、わかりにくいですね。  やりたいことは、起動したプロセスが、もしこけたら、そのイベントを補足して、何かしたいのです。  「VC++」で作成したシステムで、「WaitForMultipleObjects」ちゅうのを使って、それを実現していたのですが、「C#」でも、それに似たようなことができるらしい。  本ページは、下記のサイトを参考にさせていただきました。
[ VB.NET / C# ] プロセスの終了を非同期に捕捉する ( Process.Exited )

2. 死活監視

 いささか、はしょって書きます。

public void Start()
{
	ProcessStartInfo app = new ProcessStartInfo{ FileName = 'ロードモジュールのフルパス' };

	System.Diagnostics.Process proc = System.Diagnostics.Process.Start(app);

	if (proc == null)
	{
		エラー処理
		return;
	}

	proc.EnableRaisingEvents = true;
	proc.Exited += new EventHandler(Process_Exited);

	・・・
}

private void Process_Exited(object sender, System.EventArgs ev)
{
	System.Diagnostics.Process proc = (System.Diagnostics.Process)sender;
	出力メソッド("プロセス終了を検出しました["+ proc.StartInfo.FileName +"]");
}
 基本的には、こんな感じですな。  特に、「Wait」やタイマのしかけがなくても、起動したプロセスが、こけたら、「Process_Exited」メソッドに飛び込んできます。