【发布时间】:2011-10-09 16:49:12
【问题描述】:
我有一个应用服务器(JBoss,但这也发生在 Tomcat 中)作为服务在 Windows Server 2003 中运行。它使用 -Xrs 标志运行。
在应用服务器下运行的 Java 应用程序通过 JNI 调用一个用 C++ 编写的可定制接口(意味着我们可以更改此代码),引用第三方 DLL 文件来处理图像(Lincoln 用于转换 PostScript)。
当我们通过远程桌面连接以控制台(mstsc /console)或管理员(mstsc /admin)模式登录服务器时,当我们注销时,如果林肯 DLL 文件已加载,应用程序服务器将确认注销发出信号,服务进程将立即终止,不影响。
我相信信号是CTRL_LOGOFF,但我可能不正确。
在JavaJiggle Article on Signal Handling 之后,显然在处理 DLL 文件时将信号处理程序传递给 DLL 文件。这意味着第三方 DLL 文件(本例中为林肯)通过注销监听并响应 CTRL_LOGOFF 信号。
我相信,我应该能够在我的 C++ 接口中编写一个信号捕捉器到 DLL 以在 CTRL_LOGOFF 到达 DLL 之前拦截它,如果是这样,那么当有人注销时我们不会经常死掉控制台/管理员 RDP。
这是我需要的:
我是否更正了我在控制台/管理员注销/注销时收到的信号是
CTRL_LOGOFF?能否在C++接口中编写信号拦截器?
如何编码该信号拦截器,或者是否有预先存在的代码?我使用的是 32 位 DLL。
我找到了 Microsoft 文章 Registering a Control Handler Function,这可能有助于回答这个问题。
【问题讨论】:
标签: c++ windows-services java-native-interface signals rdp