バッチファイルを呼び出し、別の.net exeファイルを実行し、exeファイルが閉じられたときに別のバッチファイルを実行するアプリケーションをC#で作成しています。
最初のバッチファイルを実行でき、Process.start(my.exe);
メソッドを使用してexeファイルを呼び出すことができますが、最終的なバッチファイルを実行できるように、exeファイルが最終的に終了するタイミングを確認するにはどうすればよいですか?
Process.WaitForExitプロパティを使用して、アプリケーションで開始したプロセスが終了したかどうかを判断できます。
関連するプロセスが終了するまで無期限に待機するようにプロセスコンポーネントに指示します。
WaitForExit()を呼び出すことができます:
myProcess.WaitForExit():
関連するプロセスが終了すると(つまり、正常終了または異常終了によってオペレーティングシステムによってシャットダウンされると)、システムはプロセスに関する管理情報を保存し、WaitForExit()を呼び出したコンポーネントに戻ります。プロセスコンポーネントは、終了したプロセスへのハンドルを使用して、ExitTimeを含む情報にアクセスできます。
または、終了したイベントでイベントとフックコードを有効にします。
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
..。
private void myProcess_Exited(object sender, System.EventArgs e)
{
Console.WriteLine("Exit time: {0}\r\n" +
"Exit code: {1}\r\nElapsed time: {2}", myProcess.ExitTime, myProcess.ExitCode, elapsedTime);
}
主な違いは、同期または非同期です。終了したドキュメントから:
関連するプロセスが終了したときに通知を受ける方法には、同期と非同期の2つがあります。同期通知は、WaitForExitメソッドの呼び出しに依存して、関連するコンポーネントが終了するまでアプリケーションの処理を一時停止します。非同期通知は、Exitedイベントに依存しています。いずれの場合も、プロセスコンポーネントがプロセスが終了したという通知を受信するには、EnableRaisingEventsをtrueに設定する必要があります。
また、バッチファイルを実行する場合は、次の投稿を確認してください。
Process.Start(string)から返されたProcessオブジェクトを使用して、WaitForExit()を呼び出すことができます。
それで:
Process process = Process.Start(programFileName); // Starts the program
// ... do some other stuff here, if necessary
process.WaitForExit(); // Waits indefinitely for the process to finish
process.Close(); // Frees resources associated with the process
// ... do other stuff here
Process p = new Process();
p.EnableRaisingEvents = true;
//...config your process
p.Exited += new EventHandler((s, e) =>
{
if (p.ExitCode == 0)
{
/*Launch your final batch*/
}
else
{
}
});
p.Start();
Process.start()を使用してexeを起動すると、Process
オブジェクトが作成されます...Exited
イベントとEnableRaisingEvents
そのオブジェクトのプロパティを確認してください