服务的启动与停止

//显示服务

void CManageServiceDlg::ShowServiceList(DWORD dwServiceType)
{
     m_ServiceList.DeleteAllItems();

     SC_HANDLE hSCM = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);

     if( NULL == hSCM)
     {
          MessageBox("OpenSCManager Error!");
          return ;
     }

     DWORD dwBufSize = 512 * sizeof(ENUM_SERVICE_STATUS);
     DWORD dwByteNeeded,dwServicesReturned,lpResumeHandle = 0;
     ENUM_SERVICE_STATUS SerStatus[512] = {0};
     int bRet = EnumServicesStatus(hSCM,
                         dwServiceType,
                         SERVICE_STATE_ALL,
                         SerStatus,
                         dwBufSize,
                         &dwByteNeeded,
                         &dwServicesReturned,
                         &lpResumeHandle);

     if( FALSE == bRet)
     {
          MessageBox("EnumServiceStatus Error");
          CloseServiceHandle(hSCM);
          return;
     }
     for( DWORD i = 0; i < dwServicesReturned ; i ++)
     {
          CString str;
          str.Format("%d",i);
          m_ServiceList.InsertItem(i,str);
          m_ServiceList.SetItemText(i,1,SerStatus[i].lpServiceName);
          m_ServiceList.SetItemText(i,2,SerStatus[i].lpDisplayName);
          switch(SerStatus[i].ServiceStatus.dwCurrentState)
          {
          case SERVICE_PAUSED:
               m_ServiceList.SetItemText(i,3,"暂停");
               break;
          case SERVICE_STOPPED:
               m_ServiceList.SetItemText(i,3,"停止");
               break;
          case SERVICE_RUNNING:
               m_ServiceList.SetItemText(i,3,"运行");
               break;
          default:
               m_ServiceList.SetItemText(i,3,"其他");
          }
     }
     CloseServiceHandle(hSCM);
}



void CManageServiceDlg::OnBtnStart()
{
     // TODO: Add your control notification handler code here
     POSITION pos = m_ServiceList.GetFirstSelectedItemPosition();
     int nSelect = -1;

     while( pos )
     {
          nSelect = m_ServiceList.GetNextSelectedItem(pos);
     }

     if(-1 == nSelect)
     {
          MessageBox("请选择要操作的项");
          return ;
     }

     //获取选中服务的服务名
     char szServiceName[MAXBYTE] = {0};
     m_ServiceList.GetItemText(nSelect,1,szServiceName,MAXBYTE);

     SC_HANDLE hSCM = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
     if( NULL == hSCM)
     {
          MessageBox("OpenSCManager Error");
          return;
     }

     SC_HANDLE hSCService = OpenService(hSCM,szServiceName,SERVICE_ALL_ACCESS);
     //启动服务
     int bRet = StartService(hSCService,0,NULL);
     if(bRet)
          m_ServiceList.SetItemText(nSelect,3,"运行");
     else
          int n = GetLastError();
     CloseServiceHandle(hSCService);
     CloseServiceHandle(hSCM);
}


void CManageServiceDlg::OnBtnStop()
{
     // TODO: Add your control notification handler code here
     //获取选中的行
     POSITION pos = m_ServiceList.GetFirstSelectedItemPosition();
     int nSelect = -1;

     while( pos )
     {
          nSelect = m_ServiceList.GetNextSelectedItem(pos);
     }

     if(-1 == nSelect)
     {
          MessageBox("请选择要操作的项");
          return ;
     }

     //获取选中服务的服务名
     char szServiceName[MAXBYTE] = {0};
     m_ServiceList.GetItemText(nSelect,1,szServiceName,MAXBYTE);

    SC_HANDLE hSCM = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
     if(NULL == hSCM)
     {
          MessageBox("OpenSCManager Erroe");
          return ;
     }
     SC_HANDLE hSCService = OpenService(hSCM,szServiceName,SERVICE_ALL_ACCESS);
     SERVICE_STATUS ServiceStatus;

     //停止服务
     int bRet = ControlService(hSCService,SERVICE_CONTROL_STOP,&ServiceStatus);
     if( bRet )
     {
          m_ServiceList.SetItemText(nSelect,3,"停止");
     }else
     {
          int n = GetLastError();
     }
     CloseServiceHandle(hSCService);
     CloseServiceHandle(hSCM);
}


void CManageServiceDlg::OnInitServerList()
{
     m_ServiceList.SetExtendedStyle(
               m_ServiceList.GetExtendedStyle()
               | LVS_EX_GRIDLINES
               | LVS_EX_FULLROWSELECT);
     m_ServiceList.InsertColumn(0,"序号",LVCFMT_LEFT);
     m_ServiceList.InsertColumn(1,"服务名",LVCFMT_LEFT);
     m_ServiceList.InsertColumn(2,"显示名",LVCFMT_LEFT);
     m_ServiceList.InsertColumn(3,"状态",LVCFMT_LEFT);

     m_ServiceList.SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER);
     m_ServiceList.SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER);
     m_ServiceList.SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER);
     m_ServiceList.SetColumnWidth(3,LVSCW_AUTOSIZE_USEHEADER);
}
posted @ 2013-06-27 21:23  mynona  阅读(242)  评论(0编辑  收藏  举报