• C++实现系统服务暂停、停止、启动


    /*
    名称:系统服务管理
    语言:C++
    作者:由UnixCRoot(CRoot)转载自互联网
    介绍:对Windows系统服务的状态获取,服务暂停,开启,停止操作代码
    */
    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;
    }


     

  • 相关阅读:
    Build-in Function:abs(),all(),any(),assii(),bin(),issubclass(),bytearray(),isinstance()
    函数及while实例
    提示'HTTP消息不可读'
    python中关于不执行if __name__ == '__main__':测试模块的解决
    python输出测试报告测试成功
    SqlServer——批量插入数据
    网页样式——各种炫酷效果持续更新ing...
    网站部署发布到互联网等整套流程
    如何远程操控别人的电脑?我来教你
    代码生成工具——CodeSmith
  • 原文地址:https://www.cnblogs.com/croot/p/3235122.html
Copyright © 2020-2023  润新知