启动和停止服务的控制程序, 网上找的, 稍加改动

原创 2007年09月13日 10:53:00

void CNet_service_controlDlg::OnButton1()
{
 
// 打开服务管理对象
    SC_HANDLE hSC = ::OpenSCManager( NULL,
                        NULL, GENERIC_EXECUTE);
    if( hSC == NULL)
    {
        TRACE( "open SCManager error");
        return;
    }
    // 打开www服务。
    SC_HANDLE hSvc = ::OpenService( hSC, "Apache2",
        SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
    if( hSvc == NULL)
    {
        TRACE( "Open www error。");
  SaveToLog("---打开Apache2服务错误---");
        ::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)
    {
  CTime t=CTime::GetCurrentTime();
  int hou=t.GetHour();//还要判断一下时间  if(hou >= 22)
  {
   SaveToLog("---停止Apache2服务时时间不对,退出---");
            ::CloseServiceHandle( hSvc);
            ::CloseServiceHandle( hSC);
            return;
  }
        // 停止服务
        if( ::ControlService( hSvc,
          SERVICE_CONTROL_STOP, &status) == FALSE)
        {
            TRACE( "stop service error。");
   SaveToLog("---停止Apache2服务错误---");
            ::CloseServiceHandle( hSvc);
            ::CloseServiceHandle( hSC);
            return;
        }
        // 等待服务停止
        while( ::QueryServiceStatus( hSvc, &status) == TRUE)
        {
            ::Sleep( status.dwWaitHint);
            if( status.dwCurrentState == SERVICE_STOPPED)
            {
                AfxMessageBox( "stop success。");//不要提示,直接写入日志
    SaveToLog("---停止Apache2服务成功---");
                ::CloseServiceHandle( hSvc);
                ::CloseServiceHandle( hSC);
                OnOK();return;
            }
        }
    }
    else if( status.dwCurrentState == SERVICE_STOPPED)
    {
        // 启动服务
        if( ::StartService( hSvc, NULL, NULL) == FALSE)
        {
            TRACE( "start service error。");
   SaveToLog("---启动Apache2服务错误---");
            ::CloseServiceHandle( hSvc);
            ::CloseServiceHandle( hSC);
            return;
        }
        // 等待服务启动
        while( ::QueryServiceStatus( hSvc, &status) == TRUE)
        {
            ::Sleep( status.dwWaitHint);
            if( status.dwCurrentState == SERVICE_RUNNING)
            {
                AfxMessageBox( "start success。");//不要提示,直接写入日志
    SaveToLog("---启动Apache2服务成功---");
                ::CloseServiceHandle( hSvc);
                ::CloseServiceHandle( hSC);
                OnOK();return;
            }
      }
    }
    TRACE( "start error。");
 SaveToLog("---控制Apache2服务时发生未知错误---");
    ::CloseServiceHandle( hSvc);
    ::CloseServiceHandle( hSC);
 OnOK();
    return;

相关文章推荐

Linux命令常放置的位置与PATH变量设置 网上转载稍加修改

Linux命令常放置的位置与PATH变量设置Linux命令常放置的位置 LInux命令提供的命令极多,而且不同的linux系统提供的命令和用法也不尽相同,我们可以运行set |grep PATH...
  • CHEGKN
  • CHEGKN
  • 2015年05月23日 01:35
  • 1546

我为老婆制作(请下载后稍加改动)

  • 2008年12月30日 21:42
  • 4.36MB
  • 下载

SSL-用OpenSSL命令行生成证书文件-稍加补充

也许很多人和本人一样深有体会,使用OpenSSL库写一个加密通讯过程,代码很容易就写出来了,可是整个工作却花了了好几天。除将程序编译成功外(没有可以使用的证书文件,编译成功了,它并不能跑起来,并不表示...

对队列初体验的代码稍加改进

//@author:Archer //@email:583460553@qq.com || jame_peng@sina.com //模仿+练习+改进 //改进: //1、增加队列实验的可操作性改进 ...

计算机图形学基础实验二(DDA算法实现 稍加控制)

DDA用OpenGL实现

五子棋 手打稍加改变自慕课网hyman

我整理了一下,顺便加了一点屏幕切换的代码,网速太不给力,好几次都坑了直接上代码吧,稍后总结,简单粗暴,详情看题目 主程序:package com.andy.andy.myapplication;im...

稍加改动,手把手写一个acfun电影列表的爬虫-基于node

最近有空又重新看了vue2.0的文档,发现变动还是挺大的,多了虚拟dom,也像react有了对应JSX语法的render函数了,整个vue对象的生命周期也有了改动,而为了迎合2.0的标准版脚手架而不是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:启动和停止服务的控制程序, 网上找的, 稍加改动
举报原因:
原因补充:

(最多只允许输入30个字)