22

このコードを使用して.exeファイルを実行しています:

Process proc = Process.Start("c:\program.exe");
proc.WaitForExit();

プロセスを開始するStopwatch前に開始し、行の後に停止するとproc.WaitForExit();、ユーザーがその特定のプログラムを使用していた時間を取得できます。

私が直面している問題は、一部のプログラム (およびゲーム) がランチャーを使用していることです。小さな .exe ファイルは、通常、何かをチェックしてから、実際にユーザーが実行したいプログラム/ゲームである別の .exe ファイルを起動します。これらの場合、上記のコードはランチャーの存在後に戻るため機能しません。

実行中のすべてのプロセスを追跡しproc、すべてが終了するまで待機するにはどうすればよいですか?

4

3 に答える 3

6

これを見てください -自分の .NET プロセスのすべての子プロセスを見つけてください / 特定のプロセスが自分の子であるかどうかを調べてください? またはhttp://social.msdn.microsoft.com/Forums/vstudio/en-US/d60f0793-cc92-48fb-b867-dd113dabcd5c/how-to-find-the-child-processes-associated-with-a-pid . 親PID(あなたが持っている)で子プロセスを見つける方法を提供します。

作成したプロセスを監視し、その子を取得することもできます。その後、すべてを追跡し、すべてが完了するのを待つことができます. 私が「試してみる」と言ったのは、非常に急速な変化 (他の人を開始し、その子供を得る前に死ぬプロセス) を把握できるかどうかわからないからです。

于 2013-07-31T10:38:16.883 に答える
1

そのプロセス(A)がプロセス(B)を待っていない場合、別のプロセス(A)が実行されているプロセス(B)を待つことはできません。Process.GetProcessesByName()名前がわかっている場合にできることは、プロセスを追跡することです

于 2013-07-29T11:29:53.507 に答える