C#操作windows服务,安装、卸载、停止、启动
2015-10-27 18:09
477 查看
public class ServiceUtil { private string _ServiceName = string.Empty; private string _AppName = string.Empty; public string AppName { get { return _AppName; } set { _AppName = value; } } public string ServiceName { get { return _ServiceName; } } /// <summary> /// /// </summary> /// <param name="appName">后缀名为.exe的文件</param> /// <param name="serviceName"></param> public ServiceUtil(string appName, string serviceName) { _AppName = appName; _ServiceName = serviceName; } #region 启动服务 /// <summary> /// StartService /// </summary> public void StartService() { ServiceController sc = new ServiceController(_ServiceName); if (sc.Status.Equals(ServiceControllerStatus.Stopped)) { sc.Start(); } } #endregion #region 停止服务 /// <summary> /// 停止服务 /// </summary> public void StopService() { ServiceController sc = new ServiceController(_ServiceName); if (!sc.Status.Equals(ServiceControllerStatus.Stopped)) { sc.Stop(); } } #endregion #region 安装服务 /// <summary> /// 安装服务 /// </summary> public void InstallService() { if (!isServiceIsExisted(_ServiceName)) { string location = System.Reflection.Assembly.GetExecutingAssembly().Location; string serviceFileName = location.Substring(0, location.LastIndexOf('\\') + 1) + string.Format("{0}.exe", _AppName); InstallmyService(null, serviceFileName); } } #endregion #region 卸载服务 public void UnInstallService() { if (isServiceIsExisted(_ServiceName)) { string location = System.Reflection.Assembly.GetExecutingAssembly().Location; string serviceFileName = location.Substring(0, location.LastIndexOf('\\') + 1) + string.Format("{0}.exe", _AppName); UnInstallmyService(serviceFileName); } } #endregion #region 检查服务存在的存在性 /// <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; } #endregion #region Private #region 安装Windows服务 /// <summary> /// 安装Windows服务 /// </summary> /// <param name="stateSaver">集合</param> /// <param name="filepath">程序文件路径</param> private void InstallmyService(IDictionary stateSaver, string filepath) { AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller(); AssemblyInstaller1.UseNewContext = true; AssemblyInstaller1.Path = filepath; AssemblyInstaller1.Install(stateSaver); AssemblyInstaller1.Commit(stateSaver); AssemblyInstaller1.Dispose(); } #endregion #region 卸载Windows服务 /// <summary> /// 卸载Windows服务 /// </summary> /// <param name="filepath">程序文件路径</param> private void UnInstallmyService(string filepath) { AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller(); AssemblyInstaller1.UseNewContext = true; AssemblyInstaller1.Path = filepath; AssemblyInstaller1.Uninstall(null); AssemblyInstaller1.Dispose(); } #endregion #endregion }
测试环境:win8+vs2012+.net4.0
相关文章推荐
- C# 6.0 (C# vNext) 的新功能:Expression Bodied Functions and Properties
- C# WPF DataGrid控件实现三级联动
- C#中TransactionScope的使用方法和原理
- 私人C#笔记
- C# 一步一步完成一个简单的计算器 第一步---搭建计算器界面
- 问题:C# TrimEnd 去掉最后的逗号;结果: C#中 TrimEnd()用法
- 堆排序(C#)
- 4000 堆排序(C#)
- C# 不复制到本地(软件当前目录)引用程序集;
- 利用C#Marshal类实现托管和非托管的相互转换
- C#中的一些技巧
- C# Process.Start()方法详解
- csharp: InvokeHelper
- C#中方法的参数的四种类型
- (原创)c#学习笔记06--函数06--委托
- C#日期格式转换大全
- c#基础3
- C#委托全解析
- C#异步编程(二):异步基础补充
- c#基础2