谢谢
能否通过什么方法可以自动检测到该服务是不是正常运行的
当该服务程序不正常运行的时候可以将它重新启动一次
能实现吗?

解决方案 »

  1.   

    呵呵
    还是老大啊谢谢
    我怎么样检测一个service的状态呐,比如说是正在运行还是暂停状态,能在程序中实现吗?
      

  2.   

    可以. 
    1) 打开服务管理器句柄,
    2) 打开指定的服务
    3) 读取服务程序的运行状态参考下面这段:// 刷新服务状态
    CString  str("****");
    m_svrstatus = -1;
    SC_HANDLE  sh = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    if(sh != NULL)
    {
    SC_HANDLE  ss = OpenService(sh, "GameNicePhoneSvr", SERVICE_QUERY_STATUS);
    if(ss != NULL)
    {
    SERVICE_STATUS ssStatus;
    if( QueryServiceStatus( ss, &ssStatus ) )
    {
    switch(ssStatus.dwCurrentState)
    {
    case SERVICE_STOPPED :// The service is not running. 
    str = "已停止"; break;
    case SERVICE_START_PENDING :// The service is starting. 
    str = "正在启动"; break;
    case SERVICE_STOP_PENDING:// The service is stopping. 
    str = "正在停止"; break;
    case SERVICE_RUNNING:// The service is running. 
    str = "已启动"; break;
    case SERVICE_CONTINUE_PENDING:// The service continue is pending. 
    str = "正在继续"; break;
    case SERVICE_PAUSE_PENDING:// The service pause is pending. 
    str = "正在暂停"; break;
    case SERVICE_PAUSED:// The service is paused. 
    str = "已暂停"; break;
    }
    m_svrstatus = ssStatus.dwCurrentState;
    } CloseServiceHandle(ss);
    }
    else
    {
    if(GetLastError()==ERROR_SERVICE_DOES_NOT_EXIST)
    str = "未安装";
    }
    CloseServiceHandle(sh);
    }
    GetDlgItem(IDC_STATUS)->SetWindowText(str);