yehao's Blog

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;
}
http://blog.csdn.net/suiyuan1767/article/details/6712516 

posted on 2012-07-04 14:24 厚积薄发 阅读(479) 评论(0)  编辑 收藏 引用 所属分类: Windows编程Windows Mobile


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿

随笔分类

文章分类

文章档案

搜索

最新评论