2011年5月27日 星期五

QueryServiceStatus

 利用  OpenSCManager, OpenService 這兩個API可以查詢目前服務執行的狀態。
首先要#include "Winsvc.h" 才能使用SC_HANDLE等structure

bool bQueryResult = true;
 // 利用OpenSCManager API 來得到 SC_HANDLE

SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS);
    if (schSCManager==0)
    {
        TRACE(_T("RunService OpenSCManager failed\r\n"));
    }
    else
    {
 // open the service SC_HANDLE schService = OpenService( schSCManager,
pServiceName, // 這裡的ServiceName是執行檔的名稱(不含.exe),不是服務的顯示名稱
SERVICE_QUERY_STATUS); // 這裡表示執行查詢狀態

        if (schService == 0)
        {
            TRACE(_T("RunService OpenService failed"));
        }
        else
        {
            SERVICE_STATUS ss; // 宣告一個SERVICE_STATUS structure
            if(QueryServiceStatus(schService, &ss))
            {
                if(ss.dwCurrentState == SERVICE_RUNNING)

                    bQueryResult = true;
                else
                    bQueryResult = false;

            }
           
   
            CloseServiceHandle(schService);
            CloseServiceHandle(schSCManager);
        }

    }
    return bQueryResult;

沒有留言:

張貼留言