私はサービスプロセス(正式なWindowsサービスではない)をセットアップし起動するためのpowershellスクリプトを起動するアプリケーションに取り組んでいます。 ctrl + cこれらのpowershellプロセスとその子プロセスに信号を送信して、正常にシャットダウンできるようにしたいと考えています。windows ctrl + cシグナルが発射されない
私は暗黙のうちに効果的に作成したプロセスとその子のためにCTRL +CをオフにしているSetConsoleCtrlHandler(NULL,TRUE)
を呼び出して、私はCREATE_NEW_PROCESS_GROUP
を設定するPowerShellプロセスを作成します。私はctrl + 2 breakをデバッグモードにするため、を使用することはできません。だから私は起動するPowerShellプロセスでは、私は背中にCTRL + Cを回し、自分のアプリケーションを持っているSetConsoleCtrlHandler(NULL,FALSE)
を呼び出して、私はそのプロセスを停止したいときCTRL + のCのPowerShellのプロセスグループにイベントを送信するためにGenerateConsoleCtrlEvent
を呼び出します木。これは完璧に動作しますが、大きな欠陥が1つあります。
私は自分のアプリケーションが実行されているコンソールのタイプのCtrl + Cをmanuall場合は、私のアプリケーションは、cCTRL +をインターセプトし、各PowerShellプロセスのためのGenerateConsoleCtrlEvent
を呼び出します。これはうまくいくようですが、初めての場合のみです。
私のアプリケーションは、それがCTRL思わ出た後 + Cは今、私はそのコンソールで実行する任意のプログラムのためにオフになっています。 PING
または自分のアプリケーションを実行すると、ctrl + cは何も実行されず、さらにデバッグする方法がわかりません。
興味深いことに、プロセスエクスプローラのハンドルとconhost.exeの死んだpowershellプロセスが表示されることがあります。プロセスエクスプローラでこれらのハンドルを閉じると、何かctrl + cが戻ってきます。だから私はいくつかの漏れを処理すると思われるが、この観察は一貫していないし、自分のアプリケーションでプロセスハンドルを解放するように注意している。飲み込むことが私のコンソールのCTRL +C信号を発生させることができるものを上
任意の考え?
「UPDATE」の後のすべてを切り取って回答として投稿する必要があります。はい、あなたはあなた自身の質問に答えることができます。いいえ、私たちはそうすることについてあなたのことをあまり考えないでしょう。いいえ、回答は質問に埋め込まれてはなりません*。 –
それは公正@JeroenMostertです。私はそれが本当に私が聞きたかった答えではなかったかもしれないが、おそらく私が得るつもりの最高の答えかもしれないと思う:) –
それは満足するとは思わないあなた自身の答えを受け入れることはできません。 :-)賞金は注目を集める別の方法です。 –