0

当我尝试停止服务时,我创建了一个 C++ 服务应用程序并安装了该服务,并显示警告。

该服务仅包含一种已实现的方法,即:

void __fastcall TService1::ServiceExecute(TService *Sender)
{
    bool a = true;
    while(a){
       sleep(5);
       writeLog("test \n");
    }
}

如何通过蛮力停止服务,所以不显示警告?

4

1 回答 1

0

停止服务程序的正确方法是实现一个Service Control Handler Function,它可以响应SERVICE_CONTROL_STOP控制代码。通常处理程序会设置一个停止事件,这将导致ServiceMain循环退出(示例here)。

如果您使用模板来生成服务应用程序,您可能已经实现了存根接口来执行此操作。如果没有,您将需要实施它们。

实现本机 Windows 服务并非易事,并且不能仅使用单个可执行方法来完成。服务应用程序必须实现服务控制管理器 (SCM) 使用的接口,例如服务入口点服务 ServiceMain 功能服务控制处理程序功能。它还必须向 SCM报告状态和状态变化。在此处此处查看 Microsoft 的完整示例。

MSDN阅读参考:Service Programs

如果您不想实现所有必需的 SCM 接口和逻辑,Microsoft 和第三方都可以使用选项来将任何可执行文件作为服务运行。例如,请参阅 Microsoft 的srvany.exe 方法或 Iain Patterson 的NSSM

于 2013-11-11T17:21:33.670 回答