Borland C++:Windows 服务如何自行关闭?
Borland C++: How can a Windows service shutdown itself?
我有一个用 Borland C++ Builder 编写的旧 Windows 服务,我需要对其进行扩展,以便它可以在特定条件下自行关闭。
如果我通过服务控制管理器手动关闭服务,它会正常关闭,没有任何问题。所以我想,调用 this->DoShutdown();
就足够了(this
是从 TService
派生的实例)。但这会使服务处于 "Shutting down..." 状态。之后我可以调用 ExitProcess
,但这会在事件日志中创建一个条目,表明服务已意外关闭。
那么让 Borland C++ Windows 服务自行关闭的正确方法是什么?
DoShutdown()
在 Windows 关闭时收到来自 SCM 的 SERVICE_CONTROL_SHUTDOWN
请求时被 TService
调用。 DoShutdown()
不打算在用户代码中直接调用。
让您的服务自行终止的最简单方法是调用其 Controller()
方法(直接调用,或通过其全局 ServiceController()
函数),传递 SERVICE_CONTROL_STOP
或 SERVICE_CONTROL_SHUTDOWN
在 CtrlCode
参数中。让服务像处理来自 SCM 的请求一样处理请求,以便它可以采取相应的行动。
我有一个用 Borland C++ Builder 编写的旧 Windows 服务,我需要对其进行扩展,以便它可以在特定条件下自行关闭。
如果我通过服务控制管理器手动关闭服务,它会正常关闭,没有任何问题。所以我想,调用 this->DoShutdown();
就足够了(this
是从 TService
派生的实例)。但这会使服务处于 "Shutting down..." 状态。之后我可以调用 ExitProcess
,但这会在事件日志中创建一个条目,表明服务已意外关闭。
那么让 Borland C++ Windows 服务自行关闭的正确方法是什么?
DoShutdown()
在 Windows 关闭时收到来自 SCM 的 SERVICE_CONTROL_SHUTDOWN
请求时被 TService
调用。 DoShutdown()
不打算在用户代码中直接调用。
让您的服务自行终止的最简单方法是调用其 Controller()
方法(直接调用,或通过其全局 ServiceController()
函数),传递 SERVICE_CONTROL_STOP
或 SERVICE_CONTROL_SHUTDOWN
在 CtrlCode
参数中。让服务像处理来自 SCM 的请求一样处理请求,以便它可以采取相应的行动。