為了方便一點,有找到可以在程式中可以自動監控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。
沒有留言:
張貼留言