0

CreateProcessウィンドウなしで (ここに示す設定を使用して) プログラムのサーバーとして機能する Java プログラムを実行しています。コンストラクターでプロセスを実行し、プロセスハンドルを保存し、それを呼び出してデストラクタで使用してそれを強制終了するオブジェクトがありますTerminateProcess

私の問題は、隅に X を付けてウィンドウを閉じると、このデストラクタが呼び出されず、プロセスがバックグラウンドで実行され続け、ハンドルが失われ、まだ実行されているか、または強制終了する方法がないことです。それ(その他のタスクマネージャー)。どうすれば殺されることを確認できますか。

拡大図
これが私がしなければならないことです。これを達成するためのより良い方法を提案できれば、それも問題ありません。
プログラムを実行するたびに (場合によってはプログラム内で複数回)、この Java サーバーの新しいインスタンスが必要です。目に見える表示 (ウィンドウなど) なしで実行したいのですが、これは必須ではありません。何が起こっても、開いたサーバーが完了したときに強制終了されるようにするか、実行中のインスタンスがないことを確認し、そうであれば開始する前に強制終了する必要があります。新しいもの。(または、さらに良いのは、両方です。) プロセス名を使用するのは良くありません。これは単にjavaであり、コンピューター上のすべての Java インスタンスを強制終了したくないからです。できる_(方法を知っていれば)このサーバーが使用するポートでプログラムがリッスンしているかどうかを確認し、そうであれば閉じます。

EDIT
GUIはC#であり、それまたはJavaプログラム自体を制御できないことを(違いがある場合)言及するのを忘れていました。C# GUI から呼び出され、Java サーバーを使用する必要があるライブラリを c++ で作成しています。

4

2 に答える 2

0

DLL_PROCESS_DETACHを処理するようにDllMainエントリポイントを変更します。その応答は、必要なクリーンアップを実行することです。

于 2013-02-07T08:41:08.960 に答える
0

「ウォッチドッグ」と呼ばれる新しいバックグラウンド プロセスを作成します。このプロセスは、メイン GUI とバックグラウンド Java サーバーへのハンドルを取得し、GUI のプロセス ハンドルで WaitForSingleObject を呼び出します。この呼び出しが戻ったら、Java サーバーを終了します。

于 2013-02-07T08:37:22.913 に答える