我有一个用Borland C ++ Builder编写的旧Windows服务,我需要对其进行扩展,以便它可以在某些条件下自行关闭。
如果我通过服务控制管理器手动关闭服务,它会正常关闭而不会出现任何问题。所以我想,调用this->DoShutdown();
就足够了(this
是从TService
派生的实例)。但这使服务处于“关闭......”状态。之后我可以调用ExitProcess
,但这会在事件日志中创建一个条目,表明该服务已意外关闭。
那么让Borland C ++ Windows服务自行关闭的正确方法是什么?
答案 0 :(得分:0)
DoShutdown()
由TService
在Windows关闭时收到来自SCM的SERVICE_CONTROL_SHUTDOWN
请求时调用。 DoShutdown()
不能直接在用户代码中调用。
让您的服务自行终止的最简单方法是调用其Controller()
方法(直接或通过其全局ServiceController()
函数),传递SERVICE_CONTROL_STOP
或{{1}在SERVICE_CONTROL_SHUTDOWN
参数中。让服务处理请求,好像它来自SCM,因此它可以采取相应的行动。