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