VC 检测服务的运行

检测指定名称的服务运行状态,若服务暂停则恢复服务,若服务停止则启动服务。

BOOL DetectService(char* ServiceName)
{
    SC_HANDLE hSC = ::OpenSCManager( NULL,  NULL, GENERIC_EXECUTE);
    if( hSC == NULL)
    {
        return false;
    }
    // 打开服务
    SC_HANDLE hSvc = ::OpenService( hSC, ServiceName,
        SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
    if( hSvc == NULL)
    {
        return false;
        ::CloseServiceHandle( hSC);
    }
    // 获得服务的状态
    SERVICE_STATUS status;
    if( ::QueryServiceStatus( hSvc, &status) == FALSE)
    {
        return false;
        ::CloseServiceHandle( hSvc);
        ::CloseServiceHandle( hSC);
    }
	ofstream outfile;
    outfile.open(".\\检测结果.txt",ios::app);
    //服务已启动
	if( status.dwCurrentState == SERVICE_RUNNING)
	{
		outfile<<"服务";
		outfile<<ServiceName;
		outfile<<"已启动 \n";
		return true;
	}

	//如果处于停止状态则启动服务
    if( status.dwCurrentState == SERVICE_STOPPED)
    {   
		outfile<<"服务";
		outfile<<ServiceName;
		outfile<<"处于停止状态 \n";

        // 启动服务
        if( ::StartService( hSvc, NULL, NULL) == FALSE)
        {
            return false;
            ::CloseServiceHandle( hSvc);
            ::CloseServiceHandle( hSC);
        }
        // 等待服务启动
        while( ::QueryServiceStatus( hSvc, &status) == TRUE)
        {
           // ::Sleep( status.dwWaitHint);
            if( status.dwCurrentState == SERVICE_RUNNING)
            {
                ::CloseServiceHandle( hSvc);
                ::CloseServiceHandle( hSC);
				outfile<<"启动成功 \n";
				return true;
            }
		}
    }

	//如果处于暂停状态,则恢复
    if( status.dwCurrentState == SERVICE_PAUSED)
    {
		outfile<<"服务";
		outfile<<ServiceName;
		outfile<<"处于停止状态 \n";
		CString str;
		str.Format("net continue %s",ServiceName);
        WinExec(str,SW_SHOW);
		while( ::QueryServiceStatus( hSvc, &status) == TRUE)
        {
            if( status.dwCurrentState == SERVICE_RUNNING)
            {
                ::CloseServiceHandle( hSvc);
                ::CloseServiceHandle( hSC);
				outfile<<"恢复服务成功 \n";
				return true;
            }
		}
    }
    outfile<<"\n";
	outfile.close();
    ::CloseServiceHandle( hSvc);
    ::CloseServiceHandle( hSC);
	return false;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值