zoukankan      html  css  js  c++  java
  • MFC 服务管理

    #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;
    }
  • 相关阅读:
    最新超详细VMware虚拟机安装完整教程
    Java网络编程 -- AIO异步网络编程
    Java网络编程 -- NIO非阻塞网络编程
    Java网络编程 -- BIO 阻塞式网络编程
    Java网络编程 -- 网络协议
    自定义FutureTask实现
    JDK容器类List,Set,Queue源码解读
    JDK容器类Map源码解读
    深入理解Java中的锁(三)
    深入理解Java中的锁(二)
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538144.html
Copyright © 2011-2022 走看看