「あるプロセスAから別のプロセスBをCreateProcessで起動して
 そのハンドルを取得し、終了までWaitForSingleObjectで待つ」
といった、ありがちなプログラムなのですが、プロセスBからさらに
さらにShellExecute()で別のプロセスCを起動しようとすると、
ロック状態に陥ってしまい、プロセスCが正しく起動されません。

・WaitForSingleObjectで待つ処理を抜けば正常動作します。
・完全にロックかと思いきや、なぜか30秒後ぐらいにプロセスCが
 正常に実行されます。(タイムアウト?)
・プロセスAを経由せずに直接プロセスBから起動すれば問題なし。
・ShellExecuteでなくてCreateProcessを使用すれば問題なし。

このような場合の回避策は存在するのでしょうか?