引数付きのWaitForExitは,非同期イベント処理が完了していなくてもtrueを返して,抜けるときがあるので要注意. http://msdn.microsoft.com/ja-jp/library/ty0d8k56.aspx
確実に非同期イベント処理の完了を待つためには,その後でさらに引数なしのWaitForExitを呼ぶ必要がある.
if (WaitForExit(1000)) { WaitForExit(); } else { // timeout }