windows服务监控和操作相关

28 篇文章 1 订阅

代码中实现了删除服务,启动服务,停止服务,检测服务是否运行和服务是否存在等功能:


#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);
	}
	else	return -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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值