CAtlServiceModuleT::ServiceMain功能
当您打开服务控制面板应用程序,选择服务,然后单击 启动时,该服务控制管理器(SCM)调用 ServiceMain。
在SCM调用 ServiceMain后,服务必须为SCM处理程序函数。 此功能允许SCM获取服务的状态和传递特定命令(例如暂停或停止)。 SCM获取此功能,当服务通过 _Handler 对Win32 API函数时,RegisterServiceCtrlHandler。 (_Handler 是调用非静态成员函数 处理程序。)的静态成员函数
在启动服务,还应通知SCM其当前状态。 它通过将 SERVICE_START_PENDING 这样做Win32 API函数,SetServiceStatus。
ServiceMain 然后调用 CAtlExeModuleT::InitializeCom,调用Win32 API函数 CoInitializeEx。 默认情况下,InitializeCom 通过 COINIT_MULTITHREADED 标志传递给函数。 此标志指示程序是一个自由线程服务器。
现在,CAtlServiceModuleT::Run 调用服务执行的主要任务。 Run 继续执行,直到服务停止。