VC 服务管理

包含头文件:#include <winsvc.h>
以下以web服务为例:
  
 
#include <winsvc.h>
void  CStartServiceDlg::OnBnClickedButton1()
{
        // 打开服务管理对象
     SC_HANDLE  hSC = ::OpenSCManager( NULL,
                         NULL, GENERIC_EXECUTE);
     if ( hSC == NULL)
     {
         TRACE(  "open SCManager error" );
         return ;
     }
     // 打开www服务。
     SC_HANDLE  hSvc = ::OpenService( hSC,  "W3SVC" ,
         SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
     if ( hSvc == NULL)
     {
         TRACE(  "Open www erron。" );
         ::CloseServiceHandle( hSC);
         return ;
     }
     // 获得服务的状态
     SERVICE_STATUS status;
     if ( ::QueryServiceStatus( hSvc, &status) == FALSE)
     {
         TRACE(  "Get Service state error。" );
         ::CloseServiceHandle( hSvc);
         ::CloseServiceHandle( hSC);
         return ;
     }
     //如果处于停止状态则启动服务,否则停止服务。
     if ( status.dwCurrentState == SERVICE_RUNNING)
     {
         // 停止服务
         if ( ::ControlService( hSvc,
           SERVICE_CONTROL_STOP, &status) == FALSE)
         {
             TRACE(  "stop service error。" );
             ::CloseServiceHandle( hSvc);
             ::CloseServiceHandle( hSC);
             return ;
         }
         // 等待服务停止
         while ( ::QueryServiceStatus( hSvc, &status) == TRUE)
         {
             ::Sleep( status.dwWaitHint);
             if ( status.dwCurrentState == SERVICE_STOPPED)
             {
                 AfxMessageBox(  "stop success。" );
                 ::CloseServiceHandle( hSvc);
                 ::CloseServiceHandle( hSC);
                 return ;
             }
         }
     }
     else  if ( status.dwCurrentState == SERVICE_STOPPED)
     {
         // 启动服务
         if ( ::StartService( hSvc, NULL, NULL) == FALSE)
         {
             TRACE(  "start service error。" );
             ::CloseServiceHandle( hSvc);
             ::CloseServiceHandle( hSC);
             return ;
         }
         // 等待服务启动
         while ( ::QueryServiceStatus( hSvc, &status) == TRUE)
         {
             ::Sleep( status.dwWaitHint);
             if ( status.dwCurrentState == SERVICE_RUNNING)
             {
                 AfxMessageBox(  "start success。" );
                 ::CloseServiceHandle( hSvc);
                 ::CloseServiceHandle( hSC);
                 return ;
             }
       }
     }
     TRACE(  "start error。" );
     ::CloseServiceHandle( hSvc);
     ::CloseServiceHandle( hSC);
     return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值