您的位置:首页 > 其它

Windows 系统服务管理

2014-06-27 17:31 357 查看
/* 

介绍:对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 服务