C#操作windows服务
本文主要说明了Windows服务的安装、卸载、启动、停止、获取服务安装路径、获取服务状态、检查服务是否存在、获取服务版本。
我们需要引用命名空间
using System.Configuration.Install;
using System.ServiceProcess;
- /// <summary>
- /// 获取服务安装路径
- /// </summary>
- /// <param name="ServiceName"></param>
- /// <returns></returns>
- public static string GetWindowsServiceInstallPath(string ServiceName)
- {
- string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName;
- string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();
- //替换掉双引号
- path = path.Replace("\"", string.Empty);
- FileInfo fi = new FileInfo(path);
- return fi.Directory.ToString()+"\\";
- }
- /// <summary>
- /// 根据服务名称获取服务状态。
- /// </summary>
- /// <param name="serviceName">服务名</param>
- /// <returns>状态</returns>
- public static EnumServiceStatus GetServiceStatus(string serviceName)
- {
- EnumServiceStatus status=EnumServiceStatus.CannotGet;
- System.ServiceProcess.ServiceController[] scs;
- scs = System.ServiceProcess.ServiceController.GetServices();
- foreach (System.ServiceProcess.ServiceController sc in scs)
- {
- if (serviceName.ToUpper() == sc.ServiceName.ToUpper())
- {
- switch (sc.Status)
- {
- case System.ServiceProcess.ServiceControllerStatus.Stopped:
- status = EnumServiceStatus.Stopped;
- break;
- case System.ServiceProcess.ServiceControllerStatus.StartPending:
- status = EnumServiceStatus.StartPending;
- break;
- case System.ServiceProcess.ServiceControllerStatus.Running:
- status = EnumServiceStatus.Running;
- break;
- case System.ServiceProcess.ServiceControllerStatus.StopPending:
- status = EnumServiceStatus.StopPending;
- break;
- case System.ServiceProcess.ServiceControllerStatus.PausePending:
- status = EnumServiceStatus.PausePending;
- break;
- case System.ServiceProcess.ServiceControllerStatus.Paused:
- status = EnumServiceStatus.Paused;
- break;
- case System.ServiceProcess.ServiceControllerStatus.ContinuePending:
- status = EnumServiceStatus.ContinuePending;
- break;
- }
- break;
- }
- }
- return status;
- }
- /// <summary>
- /// 检查服务存在的存在性
- /// </summary>
- /// <param name=" NameService ">服务名</param>
- /// <returns>存在返回 true,否则返回 false;</returns>
- public static bool isServiceIsExisted(string NameService)
- {
- ServiceController[] services = ServiceController.GetServices();
- foreach (ServiceController s in services)
- {
- if (s.ServiceName.ToLower() == NameService.ToLower())
- {
- return true;
- }
- }
- return false;
- }
- /// <summary>
- /// 安装Windows服务
- /// </summary>
- /// <param name="stateSaver">集合</param>
- /// <param name="filepath">程序文件路径</param>
- public static void InstallmyService(IDictionary stateSaver, string filepath)
- {
- AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
- AssemblyInstaller1.UseNewContext = true;
- AssemblyInstaller1.Path = filepath;
- AssemblyInstaller1.Install(stateSaver);
- AssemblyInstaller1.Commit(stateSaver);
- AssemblyInstaller1.Dispose();
- }
- /// <summary>
- /// 卸载Windows服务
- /// </summary>
- /// <param name="filepath">程序文件路径</param>
- public static void UnInstallmyService(string filepath)
- {
- AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
- AssemblyInstaller1.UseNewContext = true;
- AssemblyInstaller1.Path = filepath;
- AssemblyInstaller1.Uninstall(null);
- AssemblyInstaller1.Dispose();
- }
- /// <summary>
- /// 启动服务
- /// </summary>
- /// <param name=" NameService ">服务名</param>
- /// <returns>存在返回 true,否则返回 false;</returns>
- public static bool RunService(string NameService)
- {
- bool bo = true;
- try
- {
- ServiceController sc = new ServiceController(NameService);
- if (sc.Status.Equals(ServiceControllerStatus.Stopped)||sc.Status.Equals(ServiceControllerStatus.StopPending))
- {
- sc.Start();
- }
- }
- catch (Exception ex)
- {
- bo = false;
- LogAPI.WriteLog(ex.Message);
- }
- return bo;
- }
- /// <summary>
- /// 停止服务
- /// </summary>
- /// <param name=" NameService ">服务名</param>
- /// <returns>存在返回 true,否则返回 false;</returns>
- public static bool StopService(string NameService)
- {
- bool bo = true;
- try
- {
- ServiceController sc = new ServiceController(NameService);
- if (!sc.Status.Equals(ServiceControllerStatus.Stopped))
- {
- sc.Stop();
- }
- }
- catch (Exception ex)
- {
- bo = false;
- LogAPI.WriteLog(ex.Message);
- }
- return bo;
- }
- /// <summary>
- /// 获取指定服务的版本号
- /// </summary>
- /// <param name="serviceName">服务名称</param>
- /// <returns></returns>
- public static string GetServiceVersion(string serviceName)
- {
- if (string.IsNullOrEmpty(serviceName))
- {
- return string.Empty;
- }
- try
- {
- string path = GetWindowsServiceInstallPath(serviceName) + "\\" + serviceName + ".exe";
- Assembly assembly = Assembly.LoadFile(path);
- AssemblyName assemblyName = assembly.GetName();
- Version version = assemblyName.Version;
- return version.ToString();
- }
- catch (Exception ex)
- {
- LogAPI.WriteLog(ex.Message);
- return string.Empty;
- }
- //string a = version.Major.ToString();
- //string b = version.Minor.ToString();
- //string c = version.Revision.ToString();
- //string d = version.Build.ToString();
- }
C#操作windows服务的更多相关文章
- C# 操作windows服务[启动、停止、卸载、安装]
主要宗旨:不已命令形式操作windows服务 static void Main(string[] args) { var path = @"E:\开发辅助项目\WCF\WCF.Test\WC ...
- C#通过SC命令和静态公共类来操作Windows服务
调用的Windows服务应用程序网址:http://www.cnblogs.com/pingming/p/5115304.html 一.引用 二.公共静态类:可以单独放到类库里 using Syste ...
- cmd命令行和bat批处理操作windows服务(转载)
一.cmd命令行---进行Windows服务操作 1.安装服务 sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32srv ...
- C#.NET 操作Windows服务承载WCF
Windows服务的制作.安装可以参考这篇: C#.NET 操作Windows服务(安装.卸载) - runliuv - 博客园 (cnblogs.com) 本篇会在这个解决方案基础上,继续修改. 一 ...
- SC命令---安装、开启、配置、关闭 cmd命令行和bat批处理操作windows服务
一.cmd命令行---进行Windows服务操作 1.安装服务 sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32s ...
- C#开发人员能够可视化操作windows服务
使用C#开发自己的定义windows服务是一个很简单的事.因此,当.我们需要发展自己windows它的服务.这是当我们需要有定期的计算机或运行某些程序的时候,我们开发.在这里,我有WCF监听案例,因为 ...
- C#.NET 操作Windows服务(安装、卸载)
注意点: 1.安装时要请求到管理员权限. 2.卸载前,一定要停止掉Windows服务,否则需要重启或注销电脑.代码无法停止服务时,使用services.msc来停止. 开始: 1.新建一个名为&quo ...
- C#操作windows服务,安装、卸载、停止、启动
public class ServiceUtil { private string _ServiceName = string.Empty; private string _AppName = str ...
- C#创建Window服务图解,安装、配置、以及C#操作Windows服务
一.首先打开VS2013,创建Windows服务项目 二.创建完成后对"Service1.cs"重命名位"ServiceDemo":然后切换到代码视图,写个服务 ...
随机推荐
- wtforms-表单生成及验证
介绍 wtforms是一个支持多个web框架的form组件,主要用来做表单的验证以及生成的, 安装 pip install wtforms 使用 自定义一个类,继承wtforms.Form类,定义字段 ...
- hibernate框架学习之二级缓存(测试用例)
HqlDemoApp.java package cn.itcast.h3.query.hql; import java.io.Serializable; import org.hibernate.Qu ...
- hibernate框架学习第五天:数据查询、投影等
复习day1环境搭建CRUD操作DB6个核心的APIday2TO PO DO 及其状态切换OID 自然主键 代理主键(uuid)一级缓存 Session绑定 load/get关系1对1 1对多(重点) ...
- python操作三大主流数据库(11)redis的安装和简单使用
命令参考文档:http://www.redis.cn/topics/introduction.html 1.安装及配置官网https://redis.io中文网站:http://www.redis.c ...
- linux杀死僵尸进程
用下面的命令找出僵死进程 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 命令注解: -A 参数列出所有进程 -o 自定义输出字段 我们设定显示字段为 sta ...
- Go语言从入门到放弃(一) 变量/常量/函数
HelloWorld 我们先看看一个最简单的HelloWorld代码 package main import "fmt" func main() { fmt.Println(&qu ...
- EventBus 3.0使用详解
01 前言 当我们进行项目开发的时候,往往是需要应用程序的各组件.组件与后台线程间进行通信,比如在子线程中进行请求数据,当数据请求完毕后通过Handler或者是广播通知UI,而两个Fragment之家 ...
- oracle user locked(timed)处理
故障现象: SQL> connect scott/scottERROR:ORA-01017: invalid username/password; logon deniedSQL> con ...
- Vmware Workstation _linux yum 仓库搭建
0:检查 vm虚拟机光盘是否已经连接 1. 检测yum 仓库是否已经配置好 [root@oracle ~]# yum list all 如果输入这条指令可以正确显示出rpm 包的列表,则说明yum 仓 ...
- Confluence 6 管理协同编辑 - 代理和 SSL 的考虑
对于你如何连接 Synchrony 是与你的环境有关的.我们知道绝大部分的 Confluence 站点是运行在反向代理后面的,同时还使用了 SSL.这里是帮助你在你环境中识别正确的配置的一些信息和一 ...