2

バッチファイルを呼び出し、別の.net exeファイルを実行し、exeファイルが閉じられたときに別のバッチファイルを実行するアプリケーションをC#で作成しています。

最初のバッチファイルを実行でき、Process.start(my.exe);メソッドを使用してexeファイルを呼び出すことができますが、最終的なバッチファイルを実行できるように、exeファイルが最終的に終了するタイミングを確認するにはどうすればよいですか?

4

5 に答える 5

4

Process.WaitForExitプロパティを使用して、アプリケーションで開始したプロセスが終了したかどうかを判断できます。

Process.WaitForExit-MSDN

関連するプロセスが終了するまで無期限に待機するようにプロセスコンポーネントに指示します。

于 2012-09-14T04:44:36.703 に答える
4

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に設定する必要があります。

また、バッチファイルを実行する場合は、次の投稿を確認してください。

C#からバッチファイルを実行する方法は?

于 2012-09-14T04:46:38.187 に答える
3

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
于 2012-09-14T04:48:38.240 に答える
1
        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();
于 2012-09-14T04:47:29.873 に答える
0

Process.start()を使用してexeを起動すると、Processオブジェクトが作成されます...ExitedイベントとEnableRaisingEventsそのオブジェクトのプロパティを確認してください

于 2012-09-14T04:46:34.077 に答える