windows服务监控和操作相关

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

#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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 19:37:18

windows服务监控和操作相关的相关文章

C# Windows Service(Windows服务)相关

https://www.cnblogs.com/charlie-chen2016/p/8031774.html 这是一个备份数据库的服务,逻辑很简单,就是通过定时器实现在特定的时间执行SQL语句备份数据库,并将每一步操作的情况写入日志文件. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using S

C#开发可以可视化操作的windows服务

使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一直执行我们开发的某些程序的时候.这里我以一个WCF的监听服务为例,因为我是做一个局域聊天室,需要服务器端监听终端,所以我就开发了一个服务,以便控制此监听服务.然而,我们开发的windows服务,默认情况下是无法可视化的操作的,这里我就额外的开发一个工具来对此服务进行操作,效果图如下: 开发步骤: 1."新建项目"--"Window服务&qu

C# 创建Windows服务。服务功能:定时操作数据库

一.创建window服务 1.新建项目-->选择Windows服务.默认生成文件包括Program.cs,Service1.cs 2.在Service1.cs添加如下代码: System.Timers.Timer timer1;  //计时器 public Service1() { InitializeComponent(); } protected override void OnStart(string[] args)  //服务启动执行 { timer1 = new System.Time

通过SSIS监控远程服务器Windows服务并发送邮件报警!

原文:通过SSIS监控远程服务器Windows服务并发送邮件报警! 利用SSIS不仅可以做BI项目的ETL,而且还可以做一些系统监控和维护工作,由于之前供应商写的Windows服务是读取ESB的消息进行处理,且通过OA流程与访客系统进行了集成,无论是ESB出现状况,还是Windows服务出现状况,都会对访问系统造成严重影响,导致内部员工无法进行接待外部人员,因此整体对ESB进行优化,在本人博客的前一篇已介绍了<通过SSIS监控远程服务器磁盘空间并发送邮件报警!>.本文实现的方法思路与此相同,仅

[转]监控windows服务,当服务停止后自动重启服务

近期花时间研究了一下windows和linux下某服务停了后自动重启的功能,在网上收集了些资料,并经过测试,在此整理一下.这里介绍的是windows服务的监控,是通过批处理来实现的.本例是监控windows的Computer Browser为例,每60秒检测一次(可根据实际需要调整间隔),当发现服务停止后自动重启.AutostartService.bat批处理文件内容如下 @echo off rem 定义循环间隔时间和监测的服务: set secs=60 set srvname="Compute

使用 RHEV APT 在 WINDOWS 虚拟机上自动化 GUEST 相关的操作

概述 Red Hat Enterprise Virtualization Application Provisioning Tool(APT)是一个可以在 Windows 虚拟机和模板上安装的 Windows 服务.当 APT 服务在一台虚拟机上安装并运行后,附加的 ISO 文件会被自动扫描.当这个服务发现了一个有效的 Red Hat Enterprise Virtualization guest 工具程序 ISO,并且还没有其它 guest 工具程序被安装时,APT 服务会安装这个 guest

Zabbix监控(九):自动监控windows服务

一.监控服务状态的Key: service_state[service] State of service. 0 - running, 1 - paused, 2 - start pending, 3 - pause pending, 4 - continue pending, 5 - stop pending, 6 - stopped, 7 - unknown, 255 - no such service 返回0表示运行,返回6表示关闭,返回7表示未知,返回255表示没有. 二.手动监控客户端

使用Zabbix监控windows服务

要监控的Windows服务如下: Zabbix中的主机配置(原主机己添加到了Zabbix中):先在这台host下添加一个 Items: 确认添加完成后,如果有多个服务需要添加,可以将当前Items进行Clone. 添加完成后,再将添加的服务状态的阈值监控起来,如果出现异常能及时报警提醒: 点击:Create trigger:配置Trigger的内容:内容中Expreesion可以通过Add进行添加,这里启用监控这个服务的状态(Running(0).Stopped(6) 服务状态码可以到zabbi

Windows环境下安装配置Mosquitto服务及入门操作介绍

#### 原创:DisSun ########## #### 时间:2019.03.10 ####### 关于Mosquitto配置的资料网上还是有几篇的,但是看来看去,基本上都是基于Linux.基于Window的凤毛麟角,看上去貌似配置的东西相差不大,实操过程中真的烦透了,配置就是不成功,这次把自己实践过程中的东西记录一下,分享出来. 一.概念梳理1.Mosquitto是一款实现了消息推送协议MQTT 3.1的开源消息代理软件,提供轻量级的.支持可订阅/可发布的消息推送模式,是设备与设备之间的