2016-12-05 2 views
2

私は、GUIを持たない別のアプリケーションを開くためにc#processクラスを使用します。それは私がそれを終了するためにProcess.Kill()を使用するC + +プロジェクトです。問題は、これがその行動を終えるチャンスを与えないということです。 Process.Close()は私のメインアプリでオブジェクトをリリースし、別のアプリケーションを実行したままにしておきます。C#は、UIを持たない別のアプリケーションを正常に閉じます。

このプロセスを正常に閉じるにはどうすればよいですか?

+0

クラスには、クリーンアップを実行し、クローズ(または実行を停止)する必要のあるオブジェクトを閉じるDispose()メソッドが必要です。 – jdweng

+0

私はあなたがProcess.Kill()を使うべきではないと思います。むしろ、2つのアプリケーション間でメッセージ(udp ...)を送信し、完了したらそのアクションを強制終了します。 –

+0

[asyncのいくつかの例:](http://stackoverflow.com/a/611127/3060520) –

答えて

1

以前は、GUIのC#ツールから非GUI GUIツールを起動する必要がありました。両方とも書いていました。私は両方のツール間で通信するために標準入出力ストリームを使用しました。

ツールを正常に終了する必要があることを示すコマンドについては、stdinでC++ツールがリッスンできるようにすることができます。次に、C#アプリケーションでquitコマンドを送信し、妥当な時間を待ってからツールが終了していない場合は、終了します。

私はC++はC++側のためにあなたの例を与えるために十分ではないことを残念ですが、次の行が終了する外部プロセスを伝えるために、私のC#プロジェクトで使用されています

m_consoleProcess.StandardInput.WriteLine("QUIT"); 
m_consoleProcess.WaitForExit(10000); 
if (!m_consoleProcess.HasExited) 
{ 
    m_consoleProcess.Kill(); 
} 

別々の外部プロセスを管理する必要がある場合は、それぞれのインスタンスに1つずつProcessインスタンスを格納する必要があり、アプリケーションを終了する前に外部プロセスが終了したケースを処理する必要があります。

関連する問題