标签:get register span lin div shu turn tin services
#include <windows.h>SERVICE_STATUS ServiceStatus;SERVICE_STATUS_HANDLE hStatus;VOID WINAPI ServiceMain( DWORD dwArgc, LPTSTR *lpszArgv );VOID WINAPI ServiceHandler( DWORD fdwControl );int main(int argc,char** argv){SERVICE_TABLE_ENTRY ServiceTable[2];ServiceTable[0].lpServiceName=”SrvSample”;ServiceTable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain;ServiceTable[1].lpServiceName=NULL;ServiceTable[1].lpServiceProc=NULL;StartServiceCtrlDispatcher(ServiceTable);return 0;}//服务控制处理函数VOID WINAPI ServiceHandler(DWORD fdwControl){switch(fdwControl){case SERVICE_CONTROL_PAUSE:ServiceStatus.dwCurrentState = SERVICE_PAUSED;break;case SERVICE_CONTROL_CONTINUE:ServiceStatus.dwCurrentState = SERVICE_RUNNING;break;case SERVICE_CONTROL_STOP:case SERVICE_CONTROL_SHUTDOWN:ServiceStatus.dwCurrentState = SERVICE_STOPPED;ServiceStatus.dwWin32ExitCode = 0;ServiceStatus.dwCheckPoint = 0;ServiceStatus.dwWaitHint = 0;SetServiceStatus(hStatus,&ServiceStatus);return ;case SERVICE_CONTROL_INTERROGATE:break;default:break;}SetServiceStatus(hStatus,&ServiceStatus);return ;}//服务主函数VOID WINAPI ServiceMain( DWORD dwArgc, LPTSTR *lpszArgv ){DWORD status = 0;DWORD specificError = 0xfffffff;ServiceStatus.dwServiceType = SERVICE_WIN32;ServiceStatus.dwCurrentState = SERVICE_START_PENDING;ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;ServiceStatus.dwWin32ExitCode = 0;ServiceStatus.dwServiceSpecificExitCode = 0;ServiceStatus.dwCheckPoint = 0;ServiceStatus.dwWaitHint = 0;hStatus=RegisterServiceCtrlHandler("SrvSample",(LPHANDLER_FUNCTION)ServiceHandler);if (hStatus==0)return;// Handle error conditionstatus = GetLastError();if (status!=NO_ERROR){ServiceStatus.dwCurrentState = SERVICE_STOPPED;ServiceStatus.dwCheckPoint = 0;ServiceStatus.dwWaitHint = 0;ServiceStatus.dwWin32ExitCode = status;ServiceStatus.dwServiceSpecificExitCode = specificError;SetServiceStatus(hStatus, &ServiceStatus);return;}// 初始化结束,报告运行状态ServiceStatus.dwCurrentState = SERVICE_RUNNING;ServiceStatus.dwCheckPoint = 0;ServiceStatus.dwWaitHint = 0;SetServiceStatus(hStatus, &ServiceStatus);//在这里做其他的工作DoWork();}
标签:get register span lin div shu turn tin services
原文地址:http://www.cnblogs.com/comor/p/7337962.html