EXE服务进程的生命周期

·

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中。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注