服务的启动与停止

//显示服务

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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mmyzlinyingjie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值