zoukankan      html  css  js  c++  java
  • VC 创建NT服务程序

    VC 创建NT服务程序

    #include "Windows.h" 
    #include "Winsvc.h" 
    #include "time.h" 
    #include "stdio.h" 
    SERVICE_STATUS m_ServiceStatus; 
    SERVICE_STATUS_HANDLE m_ServiceStatusHandle; 
    BOOL bRunning=true; 
    void WINAPI ServiceMain(DWORD argc, LPTSTR *argv); 
    void WINAPI ServiceCtrlHandler(DWORD Opcode); 
    BOOL InstallService(); 
    BOOL DeleteService(); 
    void DoTask() 
    { 
    //    do something here; 
    } 
    void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) 
    { 
    //     DWORD status;  
    //     DWORD specificError;  
          m_ServiceStatus.dwServiceType          = SERVICE_WIN32;  
          m_ServiceStatus.dwCurrentState         = SERVICE_START_PENDING;  
          m_ServiceStatus.dwControlsAccepted     = SERVICE_ACCEPT_STOP;  
          m_ServiceStatus.dwWin32ExitCode        = 0;  
          m_ServiceStatus.dwServiceSpecificExitCode = 0;  
          m_ServiceStatus.dwCheckPoint           = 0;  
          m_ServiceStatus.dwWaitHint             = 0;  
    //m_ServiceStatus.dwServiceType     = SERVICE_AUTO_START; 
    
          m_ServiceStatusHandle = RegisterServiceCtrlHandler("Service2",ServiceCtrlHandler);   
          if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)  
          {  
              return;  
          }      
          m_ServiceStatus.dwCurrentState         = SERVICE_RUNNING;  
          m_ServiceStatus.dwCheckPoint           = 0;  
          m_ServiceStatus.dwWaitHint             = 0;   
          if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))  
          {  
          }  
    
    bRunning=true; 
    while(bRunning) 
    {    
        Sleep(3000); 
        //Place Your Code for processing here....   
        DoTask(); 
        //Sleep(60*1000); 
    } 
          return;  
    } 
    
    void WINAPI ServiceCtrlHandler(DWORD Opcode) 
    { 
          switch(Opcode)  
          {  
              case SERVICE_CONTROL_PAUSE:  
                  m_ServiceStatus.dwCurrentState = SERVICE_PAUSED;  
                  break;  
    
              case SERVICE_CONTROL_CONTINUE:  
                  m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;  
                  break;  
    
              case SERVICE_CONTROL_STOP:  
                  m_ServiceStatus.dwWin32ExitCode = 0;  
                  m_ServiceStatus.dwCurrentState    = SERVICE_STOPPED;     
                  m_ServiceStatus.dwCheckPoint      = 0;  
                  m_ServiceStatus.dwWaitHint        = 0;     
                  SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus); 
         bRunning=false; 
         break; 
    
              case SERVICE_CONTROL_INTERROGATE:  
                  break;  
          }       
          return;  
    } 
    BOOL InstallService() 
    { 
    char strDir[1024]; 
    HANDLE schSCManager,schService; 
    GetCurrentDirectory(1024,strDir); 
    strcat(strDir,"\\Debug\\servicetest.exe");  
    schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);   
    
    if (schSCManager == NULL)  
        return false; 
          LPCTSTR lpszBinaryPathName=strDir; 
    
          schService = CreateService((struct SC_HANDLE__ *)schSCManager,"Service2","MB Service",             // service name to display  
              SERVICE_ALL_ACCESS,          // desired access  
              SERVICE_WIN32_OWN_PROCESS, // service type  
              SERVICE_DEMAND_START,        // start type  
              SERVICE_ERROR_NORMAL,        // error control type  
              lpszBinaryPathName,          // service's binary  
              NULL,                        // no load ordering group  
              NULL,                        // no tag identifier  
              NULL,                        // no dependencies  
              NULL,                        // LocalSystem account  
              NULL);                       // no password  
    
          if (schService == NULL)  
              return false;   
    
          CloseServiceHandle((struct SC_HANDLE__ *)schService);  
    return true; 
    } 
    
    BOOL DeleteService() 
    { 
    HANDLE schSCManager; 
    SC_HANDLE hService; 
    schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); 
    
    if (schSCManager == NULL)  
        return false;  
    hService=OpenService((struct SC_HANDLE__ *)schSCManager,"Service2",SERVICE_ALL_ACCESS); 
    if (hService == NULL)  
        return false; 
    if(DeleteService(hService)==0) 
        return false; 
    if(CloseServiceHandle(hService)==0) 
        return false; 
    else 
        return true; 
    } 
    
    int main(int argc, char* argv[]) 
    { 
    if(argc>1) 
    { 
        if(strcmp(argv[1],"-i")==0) { 
         if(InstallService()) 
          printf("\nMB Service Installed Sucessfully\n"); 
         else 
          printf("\nMB Service has been installed\n"); 
        } else if(strcmp(argv[1],"-d")==0) { 
         if(DeleteService()) 
          printf("\nMB Service UnInstalled Sucessfully\n"); 
         else 
          printf("\nInstalled Easin Central Service Not Found\n"); 
        } else { 
         printf("\nUnknown Switch Usage\nFor Install use Servicetest -i\nFor UnInstall use Servicetest -d\n"); 
        } 
    } 
    else 
    { 
        SERVICE_TABLE_ENTRY DispatchTable[]={{"Service2",ServiceMain},{NULL,NULL}};   
        StartServiceCtrlDispatcher(DispatchTable);  
    } 
    return 0; 
    }
    

  • 相关阅读:
    HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树
    字典树 HDU 1075 What Are You Talking About
    字典树 HDU 1251 统计难题
    最小生成树prim算法 POJ2031
    POJ 1287 Networking 最小生成树
    次小生成树 POJ 2728
    最短路N题Tram SPFA
    poj2236 并查集
    POJ 1611并查集
    Number Sequence
  • 原文地址:https://www.cnblogs.com/mars9/p/2159318.html
Copyright © 2011-2022 走看看