標籤:服務
代碼中實現了刪除服務,啟動服務,停止服務,檢測服務是否運行和服務是否存在等功能:
#pragma once#include <Windows.h>#include <tchar.h>//刪除服務/*返回:1:表示成功0:開啟失敗-1:表示開啟SCManager失敗*/int deleteService(LPCWSTR sSname){SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);SC_HANDLE hsev = NULL;if(scHandle != NULL){hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS);SERVICE_STATUS mss;if(hsev != NULL){QueryServiceStatus(hsev,&mss);if (mss.dwCurrentState != SERVICE_RUNNING){ControlService(hsev,SERVICE_CONTROL_STOP,&mss);DeleteService(hsev);}CloseServiceHandle(hsev);} else {CloseServiceHandle(scHandle);return 0;}CloseServiceHandle(scHandle);}elsereturn -1;return 1;}//啟動KH用戶端服務void startService(LPCWSTR sSname){SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);SC_HANDLE hscv = NULL;if (scHandle != NULL){hscv = OpenService(scHandle,sSname,SERVICE_START);if(hscv != NULL){BOOL isSucess = StartService(hscv,0,NULL);DWORD err = 0;if (isSucess == 0){err = GetLastError();}CloseServiceHandle(hscv);}CloseServiceHandle(scHandle);}}//停止KH用戶端服務void stopService(LPCWSTR sSname){SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);SC_HANDLE hsev = NULL;if(scHandle != NULL){hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS);SERVICE_STATUS mss;if(hsev != NULL){QueryServiceStatus(hsev,&mss);if (mss.dwCurrentState == SERVICE_RUNNING){ControlService(hsev,SERVICE_CONTROL_STOP,&mss);CloseServiceHandle(hsev);}}CloseServiceHandle(scHandle);}}BOOL isSvsRuning(LPCWSTR sSname){BOOL ret = FALSE;SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);SC_HANDLE hsev = NULL;if(scHandle != NULL){hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS);SERVICE_STATUS mss;if(hsev != NULL){QueryServiceStatus(hsev,&mss);if (mss.dwCurrentState == SERVICE_RUNNING){ret = TRUE;CloseServiceHandle(hsev);}}CloseServiceHandle(scHandle);}return ret;}BOOL isSvsExist(LPCWSTR sSname){BOOL ret = FALSE;SC_HANDLE scHandle = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);SC_HANDLE hsev = NULL;if(scHandle != NULL){hsev = OpenService(scHandle,sSname,SERVICE_ALL_ACCESS);DWORD err = GetLastError();if (err == ERROR_SERVICE_DOES_NOT_EXIST){ret = FALSE;}else{ret = TRUE;}if(hsev != NULL){CloseServiceHandle(hsev);CloseServiceHandle(scHandle);}}return ret;}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
windows服務監控和操作相關