SERVICE_TABLE_ENTRY service_table[2]; service_table[0].lpServiceName = L"TestService"; service_table[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain; service_table[1].lpServiceName = NULL; service_table[1].lpServiceProc = NULL; StartServiceCtrlDispatcherW(service_table);
StartServiceCtrlDispatcher函数会一直阻塞直到使用SetServiceStatus通知SCM本服务已关闭,也就是说只要不通知SCM本服务已关闭,就算ServiceMain返回,该服务进程也会一直存在,原因是主线程阻塞在StartServiceCtrlDispatcher中。
发表回复