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_STOPSERVICE_CONTROL_SHUTDOWNCtrlCode 参数中。让服务像处理来自 SCM 的请求一样处理请求,以便它可以采取相应的行动。