Windows 系统服务管理

时间:2014-06-28 07:32:06   收藏:0   阅读:299
/* 
介绍:对Windows系统服务的状态获取,服务暂停,开启,停止操作代码 
*/  
void CStartServiceDlg::OnBnClickedButton1()  
{  
       // 打开服务管理对象  
    SC_HANDLE hSC = ::OpenSCManager( NULL,   
                        NULL, GENERIC_EXECUTE);  
    if( hSC == NULL)  
    {  
        TRACE( "open SCManager error");  
        return;  
    }  
    // 打开服务。  
    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;  
}  

Windows 系统服务管理,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!