サーバサイドのexeを実行する

2006-04-08
このエントリーをはてなブックマークに追加

時間のかかる重たい処理なんかはサーバサイドに用意しておいたexeを非同期でつついたほうがいい場合があります。当然ながらクライアントサイドのexeはつつけませんが、メールの大量送信(スパムではありません)なんかをするときには結構重宝します。

//非同期でexeつつく
System.Diagnostics.Process.Start(“C:¥¥hoge¥¥hoge.exe”);

//同期でexeつつく
System.Diagnostics.Process prExe = System.Diagnostics.Process.Start(“C:¥¥hoge¥¥hoge.exe”);
prExe.WaitForExit();

上のサンプルコードは非同期です。つまり、つついた後は放置です。つつき逃げみたいな感じです。
でも、多分上のサンプルのほうが現実的なような気がします(今回の用途では、という意味で)。

下のサンプルは同期しますが、exeのプロセスが消えるまで「待つだけ」です。ほとんどフリーズと同じです。

//非同期でexeつついて、exeの実行が終了したらイベント起こす
System.Diagnostics.Process prExe = System.Diagnostics.Process.Start(“C:¥¥hoge¥¥hoge.exe”);
prExe.EnableRaisingEvents = true;
prExe.Exited += new EventHandler(prExe_Exited);

private void prExe_Exited(object sender, EventArgs e)
{
//終了したらこのメソッドが呼ばれます
}

このサンプルだと、非同期でexeつついておいて、プロセスが終了したら「終わったよ」というイベントあげてくれます。WEBアプリの場合、サーバからクライアントにイベント通知はできないけど、「処理が終わりました」メールくらいは送れそうです。
まぁ、Windowsアプリ向けの手法でしょうね。

Tags: