java Windows服务进程被终止而不是停止
我用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的socket连接(当然,它正在等待此连接)。这只是一个触发器,它告诉JavaVM检查“终止”文件,删除该文件并正确关闭。完成此操作后,服务也会正确终止。
当我通过sc stop MyServiceName
关闭服务时,一切正常:文件被创建,JavaVM终止,服务在大约一秒钟内停止。
但当我关闭或重新启动计算机时,进程就会停止。创建了终止文件,但JavaVM日志或服务日志中没有正确关闭服务的日志条目。
我是否可以通过编程方式告诉服务控制管理器等待此服务
共 (0) 个答案