我在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日志或服务日志中没有正确关闭服务的日志条目。
我能以某种方式以编程方式告诉服务控制管理器等待这项服务吗?