質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

4210閲覧

C#で親子関係にない外部プロセスを終了させて、終了したことを検知したい。

HAL-

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2022/01/11 08:23

現在

外部プロセスが既に起動されている状態で
自ソフトから外部プロセスを確実に終了させたい考えていますが障害が多く
困っています。

###試したこと
・Process.CloseMainWindow()
終了メッセージを投げるだけで終了しない場合がある。
終了も検知できない。

・Process.kill()
確実に強制終了はしますが、終了したことが自プロセス側で検知できない。

・Process.WaitForExit()
このメソッドが一番希望に沿っていますが
親子関係にないため終了に失敗していまいます。

質問

Process.WaitForExit()で終了まで待機できればそれが一番いいのですが
親子関係にない(自分で起動していないのでハンドルを持っていない)
外部プロセスを終了し、終了したことを検知するにはどうすればよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/01/11 08:29 編集

Process.GetProcessById で消えるまで待つのはどうですか? または Exited イベントに登録するとか。
matukeso

2022/01/11 09:22

ソース見る限り、WaitForExitは親子関係なくても使えるはずだけど、、 何、まだ生きているのにTRUEが戻るの?
HAL-

2022/01/11 10:00

>>Zuishin様 ご回答ありがとうございます。 終了を検知する処理を自作すればよかったですね。 ただ、matukesoさんの回答によってProcess.WaitForExit()の 使用方法に誤りがあったことがわかったのでProcess.WaitForExit()で解決したいと思います。
HAL-

2022/01/11 10:05

>>matukeso WaitForExit()の使用方法が誤ってました。 WaitForExit()の呼び出しで終了処理→終了まで待機 だと勘違いしていたのですが、実際の処理は 終了待機のみでその前に終了処理を投げる必要がありました。 タイムアウトでfalseが戻されていたので終了に失敗したと 思い込んでしまいました。 勘違いで恥ずかしいのですが自己解決としてこの質問を閉じたいと思います。
guest

回答1

0

自己解決

WaitForExit()の呼び出しで終了処理→終了まで待機
だと勘違いしていたのが原因です。
WaitForExit()は名前の通り終了の待機のみをするメソッドのため
終了処理は別に命令する必要があります。
そのため今回のようなケースでは
Process.Kill()→WaitForExit(待ち時間)
で終了と終了確認したいと思います。

投稿2022/01/11 10:08

HAL-

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問