2017-07-15 15 views
3

私はサービスプロセス(正式な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信号を発生させることができるものを上

任意の考え?

+0

「UPDATE」の後のすべてを切り取って回答として投稿する必要があります。はい、あなたはあなた自身の質問に答えることができます。いいえ、私たちはそうすることについてあなたのことをあまり考えないでしょう。いいえ、回答は質問に埋め込まれてはなりません*。 –

+0

それは公正@JeroenMostertです。私はそれが本当に私が聞きたかった答えではなかったかもしれないが、おそらく私が得るつもりの最高の答えかもしれないと思う:) –

+0

それは満足するとは思わないあなた自身の答えを受け入れることはできません。 :-)賞金は注目を集める別の方法です。 –

答えて

1

GenerateConsoleCtrlEventを発射するには、ユーザがCTRL +Cはこの奇妙な状態にシェルを置くもので呼び出された後と思われます。ユーザーがctrl + cと入力すると、GenerateConsoleCtrlEventがコンソールのすべてのプロセスにブロードキャストされるため、私のアプリケーションでGenerateConsoleCtrlEventを呼び出す必要はありません。私のアプリを残念ながら残しているのは、ctrl + cの方が簡単ですが不可能ではありません。

私はC型付けCTRL +GenerateConsoleCtrlEventを発射すると、この奇妙な効果を持っていますが、おそらくこの記事は、他の誰かを助けることを示すいかなる文書や情報を発見したことをその不安。

この状態がなぜトリガーされるのか、それを避けるためのヒントと、シェルをより弾力性のあるものにするためのヒントがあれば、ここに別の回答を投稿してください。

関連する問題