利用 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;
沒有留言:
張貼留言