c. windows 서비스 프로그램 만 들 기

// SqlServices.cpp : WinMain    
#define SLEEP_TIME 1000  
SERVICE_STATUS ServiceStatus; //     
SERVICE_STATUS_HANDLE hStatus; //       

서비스 초기 화
//       
int InitService() 
{ 
 int result;  
  
  return(result); 
}

2. main 함수 가 할당 표를 만 들 고 제어 할당 기 를 시작 합 니 다.
//mai0n               
void main() 
{ 
 TCHAR serviceName[] = _T("GWAMService");
 SERVICE_TABLE_ENTRY ServiceTable[2];  
 ServiceTable[0].lpServiceName = serviceName; //              (                )
 ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain; //          (     ) //                       NULL   
 ServiceTable[1].lpServiceName = NULL; 
 ServiceTable[1].lpServiceProc = NULL;  //              
 StartServiceCtrlDispatcher(ServiceTable);  
}

3.ServiceMain 코드
void ServiceMain(int argc, char** argv) 
{
 BOOL bRet;
 bRet = TRUE;  
 ServiceStatus.dwServiceType = SERVICE_WIN32; //       
 ServiceStatus.dwCurrentState = SERVICE_START_PENDING; //         ,      
 ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;//          ,       ,             
 ServiceStatus.dwWin32ExitCode = 0; //  win32       
 ServiceStatus.dwServiceSpecificExitCode = 0;//             
 ServiceStatus.dwCheckPoint = 0;//      ,           ,  scm  dwWaitHint      
 ServiceStatus.dwWaitHint = 0; //   
 hStatus = RegisterServiceCtrlHandler(_T("SERVICENAME"), (LPHANDLER_FUNCTION)ControlHandler); 
 if (hStatus == (SERVICE_STATUS_HANDLE)0) 
 {
  //    
  return;
 } // service      
 ServiceStatus.dwCurrentState = SERVICE_RUNNING; 
 SetServiceStatus (hStatus, &ServiceStatus);//         
 while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)//        
 {
  
  //GWEW007_FUNC01();//      
  StartFunc();//      
  
   //ServiceStatus.dwCurrentState == SERVICE_CONTROL_STOP;

  
  Sleep(SLEEP_TIME);

   }
 return;
}

4. 제어 요청 처리
void ControlHandler(DWORD request) 
{ 
 switch(request) 
 { 
 case SERVICE_CONTROL_STOP: 
  ServiceStatus.dwWin32ExitCode = 0; 
  ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
  SetServiceStatus (hStatus, &ServiceStatus);
  return;  case SERVICE_CONTROL_SHUTDOWN: 
  GWAM001_FUNC01("Monitoring stopped."); 
  ServiceStatus.dwWin32ExitCode = 0; 
  ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
  SetServiceStatus (hStatus, &ServiceStatus);
  return;  
 default:
  break;
 }  SetServiceStatus (hStatus, &ServiceStatus); 
 return; 
}

좋은 웹페이지 즐겨찾기