各位大侠,请问如何用编码方式忽略 CTRL_LOGOFF_EVENT 这个信号呢?Java启动参数 "-Xrs" 可以忽略掉这个信号,可是 CTRL_C_EVENT, CTRL_CLOSE_EVENT, 和 CTRL_SHUTDOWN_EVENT 也被忽略掉了, 并且 "-Xrs" 不是标准的参数, 这在将来移植的时候也会遇到问题。 所以我正在寻找一种编码的方式来解决这个问题。谢谢。

解决方案 »

  1.   

    如果你是想把Java程序做成Service又害怕受logoff影响,可以考虑使用JavaService来帮忙。http://forge.ow2.org/projects/javaservice/
      

  2.   

    vm默认收到logoff信号时是会终止的
    须在进程中注册一个自定义logoff handler在JNI service应用程序中尝试以下代码,如果是用的JNI的话,我想java service也是类似的SetConsoleCtrlHandler(logoffHandler, TRUE);
    ..
    ..
    BOOL WINAPI logoffHandler(DWORD dwCtrlType)
    {
        switch(dwCtrlType)
        {
            case CTRL_C_EVENT:
                return TRUE;
            case CTRL_CLOSE_EVENT:
                return TRUE;
            case CTRL_SHUTDOWN_EVENT:
                // You may want to do some things in your java app here
                return TRUE;
            case CTRL_LOGOFF_EVENT:
                return TRUE;
        }
        return FALSE;
    }
      

  3.   

    请问有什么JAVA API 来实现这个功能么?
    我的JAVA程序没有使用JNI,所以SetConsoleCtrlHandler 不能使用, 用 JavaService 工作量又太大了。 :)thanks,
      

  4.   

    搜索了下Java的API,也没发现什么有用的函数, 继续想办法, 谢谢各位了。
      

  5.   

    从Java中通过JNI的方式调用SetConsoleCtrlHandler也能屏蔽掉logoff event.