停止C ++服务应用程序

时间:2013-11-11 12:31:12

标签: c++ service warnings

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

服务只包含一个实现的方法:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

实现本机Windows服务并非易事,只能通过一个可执行方法来完成。服务应用程序必须实现服务控制管理器(SCM)使用的接口,例如Service Entry PointService ServiceMain FunctionService Control Handler Function。它还必须{SCM} report status and state changes。请参阅Microsoft herehere的完整示例。

MSDN阅读参考:Service Programs

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