Windows服务进程被杀死而不是停止

时间:2016-11-04 09:01:57

标签: java c windows multithreading service

我在C中编写了一个程序,它在一个线程中启动JavaVM并检查主循环中另一个服务的新版本。此程序在Windows上作为服务运行。这意味着实现了所需的服务方法:

 void ControlHandler(DWORD request) {
        switch (request) {
        case SERVICE_CONTROL_STOP:
            ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
            SetServiceStatus(hStatus, &ServiceStatus);
            break;
        case SERVICE_CONTROL_SHUTDOWN:
            ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
            SetServiceStatus(hStatus, &ServiceStatus);
            break;
        }
        return;
    }

关闭进程在硬盘上写入名为“terminate”的文件,并打开与JavaVM的套接字​​连接(当然正在等待此连接)。这只是一个触发器,它告诉JavaVM检查“终止”文件,删除此文件并正确关闭。完成此操作后,该服务也会正确终止。 当我通过sc stop MyServiceName关闭服务时,一切正常:文件被创建,JavaVM终止,服务在大约一秒钟内停止。 但是当我关闭或重新启动计算机时,这个过程就会被杀死。终止文件已创建,但JavaVM日志或服务日志中没有正确关闭服务的日志条目。 我能以某种方式以编程方式告诉服务控制管理器等待这项服务吗?

0 个答案:

没有答案