我创建了一个C ++服务应用程序并在我尝试停止服务时显示了警告。
服务只包含一个实现的方法:
void __fastcall TService1::ServiceExecute(TService *Sender)
{
bool a = true;
while(a){
sleep(5);
writeLog("test \n");
}
}
如何通过蛮力停止服务,所以不显示警告?
答案 0 :(得分:0)
停止服务程序的正确方法是实现Service Control Handler Function,它可以响应SERVICE_CONTROL_STOP
控制代码。通常,处理程序将设置一个停止事件,这将导致ServiceMain循环退出(例如here)。
如果您使用模板生成服务应用程序,则可能已经实现了存根接口来执行此操作。如果没有,你需要实现它们。
实现本机Windows服务并非易事,只能通过一个可执行方法来完成。服务应用程序必须实现服务控制管理器(SCM)使用的接口,例如Service Entry Point,Service ServiceMain Function和Service Control Handler Function。它还必须{SCM} report status and state changes。请参阅Microsoft here和here的完整示例。
MSDN阅读参考:Service Programs
如果您不想实现所有必需的SCM接口和逻辑,Microsoft和第三方都可以选择将任何可执行文件作为服务运行。例如,请参阅Microsoft的srvany.exe method或Iain Patterson的NSSM。