• 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;
    }
  • 相关阅读:
    Intelij根据数据库表生成实体类
    RabbitMQ(二):入门案例
    RabbitMQ(一):简介和基本概念
    Python 第十课,面向对象补足,异常处理
    Python 第九课,面向对象进阶
    Python 第七课,模块
    Python 第六课,装饰器,生成器,迭代器,其他
    Python 第五课,正则表达式
    Python 第四课,内置函数,I/O操作。
    Python 第三课,函数。
  • 原文地址:https://www.cnblogs.com/laohaozi/p/8266496.html
Copyright © 2020-2023  润新知