3

プロセスBを開始するプロセスAがあります。
これらはWCF(IAsyncResult APMパターン)で通信し、AはクライアントBはサービスです。
プロセスAが停止したら、Bを閉じる必要があります。

プロセスAidをargとしてプロセスbに送信していますが、彼は次のことを行います。

Process.GetProcessById(processId).WaitForExit();

これは正常に機能しています。
私の質問は、プロセスaが停止した場合に、プロセスbを適切に強制終了する方法です。

私は次のすべてを試しました:

Process.GetCurrentProcess().Close();
Process.GetCurrentProcess().Dispose();
Application.Exit(); > its a guiless winform application

うまくいったのは:

Process.GetCurrentProcess().Kill();

しかし、プロセスを殺すことはあまりにも残酷ではありませんか?

コードの追加:
メイン内のプロセスB:

TrackExternalProcess(externalProcessId, () => { OnExternalProcessClosed(); });

パブリックメソッド:

    public static void TrackExternalProcess(int processId, Action onExternalProcessClosed)
    {
        new Thread(new ThreadStart(delegate
        {
            try
            {
                Thread.CurrentThread.IsBackground = true;
                Process.GetProcessById(processId).WaitForExit();

                logger.Error("Host process quit unexpectedly");

                onExternalProcessClosed();
            }
            catch (Exception)
            {
            }
        })).Start();
    }

    public static void OnExternalProcessClosed()
    {
        Process.GetCurrentProcess().Kill();

    }
4

2 に答える 2

2

Environment.Exit()クリーナーじゃない?

于 2013-03-19T17:16:49.413 に答える
0

よりクリーンなバージョンはありませんでした。単に Dispose メソッドを呼び出しただけです。
閉じられた WCF サービスなど、すべてを処理しました。
そして最後に Process.GetCurrentProcess().Kill();

于 2013-04-26T04:32:54.123 に答える