不死鳥アプリの作り方
ちょうど、とある事情で死なないアプリ、無理なら真でもすぐ生き返るアプリを作る機会があったのでまとめてみます。
何すればいい?
私の取った作戦はこんな感じ。アプリAとアプリBの双子が協力して片方のアプリを不死鳥にします。アプリA兄貴分だとしたら、やっていることはだいたいこんな感じ。
- アプリAからアプリAのプロセスIDを引数に取ってアプリBを起動させられるようにする
- アプリAが落ちると、アプリBがそれを検知してアプリAを起動させて終了する
- アプリBが落ちると、アプリAがそれを検知してアプリBを起動する
.NETで愚直にやるならこれがいちばん早いと思います。
プロセスの終了を検知するにはProcess.Exitedイベントをハンドルするのがいちばん早いと思いますが、1点はまりポイントがあります。のイベントフラグをたてないと発生しません。
このイベントは、EnableRaisingEvents プロパティの値が true の場合にのみ発生します。
Process.Exited イベント (System.Diagnostics)
それから、どちらかをウィンドウも表示せず、タスクバーにも表示させたくない、ということがほとんどだと思います。これは以外と簡単にできて、
コンソールアプリケーションとしてプロジェクトを作る→すかさず構成をウィンドウアプリケーションにする
これでいけます。FormやWindowを表示させなければ何も出てきません。万が一生き残ってしまったらタスクマネージャーから探してKillしてやるしかなくなります。表示させない方はなんとかしてきっちり跡を残さず天に召されるような仕掛けにしておく必要があります。