Windows Server 2003でサービスとして実行しているアプリケーションサーバー(JBossですが、これはTomcatでも発生します)があります。-Xrs
フラグを付けて実行しています。
アプリケーションサーバーで実行されているJavaアプリケーションは、JNIを介してC ++で記述されたカスタマイズ可能なインターフェイスを呼び出し(このコードを変更できることを意味します)、イメージを処理するためにサードパーティのDLLファイル(PostScriptを変換するためのリンカーン)を参照します。
mstsc /console
コンソール()モードまたは管理者( )モードのいずれかでリモートデスクトップ接続を介してサーバーにログインするmstsc /admin
場合、ログアウトすると、リンカーンDLLファイルがロードされている場合、アプリケーションサーバーはログオフ信号を確認し、サービスプロセスはすぐに終了します。偏見。
信号はCTRL_LOGOFF
正しいと思いますが、間違っている可能性があります。
シグナル処理に関するJavaJiggleの記事の後、DLLファイルの処理中にシグナルハンドラーがDLLファイルに渡されるようです。これは、サードパーティのDLLファイル(この場合はリンカーン)がログオフすることでCTRL_LOGOFF
信号をリッスンし、応答することを意味します。
DLLに到達する前にインターセプトするためにC++インターフェイスでDLLへのシグナルキャッチャーをコーディングできるはずCTRL_LOGOFF
です。そうであれば、誰かがコンソール/管理者RDPからログオフしたときに絶えず死ぬことはありません。
これが私が必要とするものです:
console / admin logoff / logoutで取得しているシグナルが正しい
CTRL_LOGOFF
ですか?C ++インターフェイスでシグナルインターセプターを作成できますか?
その信号インターセプターをコーディングするにはどうすればよいですか、または既存のコードがありますか?32ビットDLLを使用しています。
この質問に答えるのに役立つ可能性のあるMicrosoftの記事「コントロールハンドラー関数の登録」を見つけました。