vc 判断SQLServer/Ftp/IIS服务器状态

 chSQLServer="MSSQLSERVER";
 chFtpServer="MSFTPSVC";

 chIIsServer="W3SVC";

SC_HANDLE hHandle=::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
 SC_HANDLE hService;   
 if(hHandle==NULL)//创建句柄失败
 {  //检查服务失败
  AfxMessageBox("检查IIS服务失败!");
 }
 ENUM_SERVICE_STATUS service;
 DWORD dwBytesNeeded=0;
    DWORD dwServicesReturned=0;
 DWORD dwResumedHandle=0;
 DWORD dwServiceType=SERVICE_WIN32; //只读取WIN32服务|SERVICE_DRIVER;
 char * chServiceName;
 char * chFind;
 BOOL  bResult;
 bool bHasService=false;

 chFind="MSSQLSERVER";
 //chFind="MSFTPSVC";
 chFind=_strupr(_strdup(chFind));
 //查找服务列表
 bResult=::EnumServicesStatus(hHandle,
                          dwServiceType,
        SERVICE_STATE_ALL,
        &service,
        sizeof(ENUM_SERVICE_STATUS),
        &dwBytesNeeded,
        &dwServicesReturned,
        &dwResumedHandle);
         if(!bResult)
   {
      //获取应需要的内存空间
    if(GetLastError()==ERROR_MORE_DATA)
    {
      DWORD dwBytes=sizeof(ENUM_SERVICE_STATUS)+dwBytesNeeded;
      ENUM_SERVICE_STATUS *pServices=NULL;
      pServices=new ENUM_SERVICE_STATUS[dwBytes];

      //获取服务列表
      EnumServicesStatus(hHandle,
                      dwServiceType,
          SERVICE_STATE_ALL,
          pServices,
          dwBytes,
          &dwBytesNeeded,
          &dwServicesReturned,
          &dwResumedHandle);
   
 
                       //提取每个列表
      for(unsigned iIndex=0;iIndex<dwServicesReturned;iIndex++)
      {
        //chServiceName=(pServices+iIndex)->lpDisplayName;
     //AfxMessageBox((pServices+iIndex)->lpDisplayName);
       chServiceName=_strupr(_strdup((pServices+iIndex)->lpServiceName));
       if(strcmp(chFind,chServiceName)==0)
       {
          switch((pServices+iIndex)->ServiceStatus.dwCurrentState)
       {
       case SERVICE_STOPPED:
        //启动Ftp                       
        hService= OpenService(hHandle,chServiceName,SERVICE_ALL_ACCESS);
       if(hService==0)
       {      
        AfxMessageBox("无法启动Ftp");
       }
       else
       {
         bResult=StartService(hService,0,NULL);
         if(!bResult)
         {
           AfxMessageBox("无法启动Ftp");      
         }
         else
         {
           AfxMessageBox("已经成功启动了Ftp"); 
        
         }
           CloseServiceHandle(hService);
       }
       
         break;
       case  SERVICE_RUNNING:    
        AfxMessageBox("Ftp正在运行中");      
                          //GetNewSiteName("默认网站",NULL);      
                          break;
       }

                      bHasService=true;
       free(chServiceName);
                      break;  //退出循环
       }
       free(chServiceName);
      }
       delete[] pServices;
       pServices=NULL;

    }
                 CloseServiceHandle(hHandle);
   }
   else
   {
     AfxMessageBox("检查Ftp服务失败!");
   }

   free(chFind);
   if(!bHasService)
   { 
          AfxMessageBox("你的计算机还没有安装Ftp");
   }
  
}

你可能感兴趣的:(manager,服务器,service,null,delete,Access)