為了方便一點,有找到可以在程式中可以自動監控Service的狀態,甚至可以自動控制Service的方法:
#include <Windows.h> int main() { LPCWSTR ServiceName = L"YourServiceName"; SC_HANDLE serviceDbHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); SC_HANDLE serviceHandle = OpenService(serviceDbHandle, ServiceName, SC_MANAGER_ALL_ACCESS); SERVICE_STATUS_PROCESS status; DWORD bytesNeeded; // detect service QueryServiceStatusEx(serviceHandle, SC_STATUS_PROCESS_INFO, (LPBYTE)&status, sizeof(SERVICE_STATUS_PROCESS), &bytesNeeded); // control service if (status.dwCurrentState == SERVICE_STOPPED) { cout << "Service stop!" << std::endl; BOOL b = StartService(serviceHandle, NULL, NULL); if (b) { cout << "Service start" << endl; } else{ cout << "Service start fail" << endl; } } CloseServiceHandle(serviceHandle); CloseServiceHandle(serviceDbHandle); }
如果是要把Service停止的話,就把control service那段改成:
if (status.dwCurrentState == SERVICE_RUNNING) { cout << "Service is running!" << std::endl; BOOL b = ControlService(serviceHandle, SERVICE_CONTROL_STOP, (LPSERVICE_STATUS) &status); if (b) { cout << "Service stop" << std::endl; } else{ cout << "Service stop" << std::endl; } }
最後記得!產生的執行檔必須要"以系統管理員身分執行",這樣才有足夠權限可以控制Windows的Service。
沒有留言:
張貼留言