本文主要说明了Windows服务的安装、卸载、启动、停止、获取服务安装路径、获取服务状态、检查服务是否存在、获取服务版本。

我们需要引用命名空间
using System.Configuration.Install;
using System.ServiceProcess;

  1. /// <summary>
  2. /// 获取服务安装路径
  3. /// </summary>
  4. /// <param name="ServiceName"></param>
  5. /// <returns></returns>
  6. public static string GetWindowsServiceInstallPath(string ServiceName)
  7. {
  8. string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName;
  9. string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();
  10. //替换掉双引号
  11. path = path.Replace("\"", string.Empty);
  12. FileInfo fi = new FileInfo(path);
  13. return fi.Directory.ToString()+"\\";
  14. }
  15. /// <summary>
  16. /// 根据服务名称获取服务状态。
  17. /// </summary>
  18. /// <param name="serviceName">服务名</param>
  19. /// <returns>状态</returns>
  20. public static EnumServiceStatus GetServiceStatus(string serviceName)
  21. {
  22. EnumServiceStatus status=EnumServiceStatus.CannotGet;
  23. System.ServiceProcess.ServiceController[] scs;
  24. scs = System.ServiceProcess.ServiceController.GetServices();
  25. foreach (System.ServiceProcess.ServiceController sc in scs)
  26. {
  27. if (serviceName.ToUpper() == sc.ServiceName.ToUpper())
  28. {
  29. switch (sc.Status)
  30. {
  31. case System.ServiceProcess.ServiceControllerStatus.Stopped:
  32. status = EnumServiceStatus.Stopped;
  33. break;
  34. case System.ServiceProcess.ServiceControllerStatus.StartPending:
  35. status = EnumServiceStatus.StartPending;
  36. break;
  37. case System.ServiceProcess.ServiceControllerStatus.Running:
  38. status = EnumServiceStatus.Running;
  39. break;
  40. case System.ServiceProcess.ServiceControllerStatus.StopPending:
  41. status = EnumServiceStatus.StopPending;
  42. break;
  43. case System.ServiceProcess.ServiceControllerStatus.PausePending:
  44. status = EnumServiceStatus.PausePending;
  45. break;
  46. case System.ServiceProcess.ServiceControllerStatus.Paused:
  47. status = EnumServiceStatus.Paused;
  48. break;
  49. case System.ServiceProcess.ServiceControllerStatus.ContinuePending:
  50. status = EnumServiceStatus.ContinuePending;
  51. break;
  52. }
  53. break;
  54. }
  55. }
  56. return status;
  57. }
  58. /// <summary>
  59. /// 检查服务存在的存在性
  60. /// </summary>
  61. /// <param name=" NameService ">服务名</param>
  62. /// <returns>存在返回 true,否则返回 false;</returns>
  63. public static bool isServiceIsExisted(string NameService)
  64. {
  65. ServiceController[] services = ServiceController.GetServices();
  66. foreach (ServiceController s in services)
  67. {
  68. if (s.ServiceName.ToLower() == NameService.ToLower())
  69. {
  70. return true;
  71. }
  72. }
  73. return false;
  74. }
  75. /// <summary>
  76. /// 安装Windows服务
  77. /// </summary>
  78. /// <param name="stateSaver">集合</param>
  79. /// <param name="filepath">程序文件路径</param>
  80. public static void InstallmyService(IDictionary stateSaver, string filepath)
  81. {
  82. AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
  83. AssemblyInstaller1.UseNewContext = true;
  84. AssemblyInstaller1.Path = filepath;
  85. AssemblyInstaller1.Install(stateSaver);
  86. AssemblyInstaller1.Commit(stateSaver);
  87. AssemblyInstaller1.Dispose();
  88. }
  89. /// <summary>
  90. /// 卸载Windows服务
  91. /// </summary>
  92. /// <param name="filepath">程序文件路径</param>
  93. public static void UnInstallmyService(string filepath)
  94. {
  95. AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
  96. AssemblyInstaller1.UseNewContext = true;
  97. AssemblyInstaller1.Path = filepath;
  98. AssemblyInstaller1.Uninstall(null);
  99. AssemblyInstaller1.Dispose();
  100. }
  101. /// <summary>
  102. /// 启动服务
  103. /// </summary>
  104. /// <param name=" NameService ">服务名</param>
  105. /// <returns>存在返回 true,否则返回 false;</returns>
  106. public static bool RunService(string NameService)
  107. {
  108. bool bo = true;
  109. try
  110. {
  111. ServiceController sc = new ServiceController(NameService);
  112. if (sc.Status.Equals(ServiceControllerStatus.Stopped)||sc.Status.Equals(ServiceControllerStatus.StopPending))
  113. {
  114. sc.Start();
  115. }
  116. }
  117. catch (Exception ex)
  118. {
  119. bo = false;
  120. LogAPI.WriteLog(ex.Message);
  121. }
  122. return bo;
  123. }
  124. /// <summary>
  125. /// 停止服务
  126. /// </summary>
  127. /// <param name=" NameService ">服务名</param>
  128. /// <returns>存在返回 true,否则返回 false;</returns>
  129. public static bool StopService(string NameService)
  130. {
  131. bool bo = true;
  132. try
  133. {
  134. ServiceController sc = new ServiceController(NameService);
  135. if (!sc.Status.Equals(ServiceControllerStatus.Stopped))
  136. {
  137. sc.Stop();
  138. }
  139. }
  140. catch (Exception ex)
  141. {
  142. bo = false;
  143. LogAPI.WriteLog(ex.Message);
  144. }
  145. return bo;
  146. }
  147. /// <summary>
  148. /// 获取指定服务的版本号
  149. /// </summary>
  150. /// <param name="serviceName">服务名称</param>
  151. /// <returns></returns>
  152. public static string GetServiceVersion(string serviceName)
  153. {
  154. if (string.IsNullOrEmpty(serviceName))
  155. {
  156. return string.Empty;
  157. }
  158. try
  159. {
  160. string path = GetWindowsServiceInstallPath(serviceName) + "\\" + serviceName + ".exe";
  161. Assembly assembly = Assembly.LoadFile(path);
  162. AssemblyName assemblyName = assembly.GetName();
  163. Version version = assemblyName.Version;
  164. return version.ToString();
  165. }
  166. catch (Exception ex)
  167. {
  168. LogAPI.WriteLog(ex.Message);
  169. return string.Empty;
  170. }
  171. //string a = version.Major.ToString();
  172. //string b = version.Minor.ToString();
  173. //string c = version.Revision.ToString();
  174. //string d = version.Build.ToString();
  175. }

C#操作windows服务的更多相关文章

  1. C# 操作windows服务[启动、停止、卸载、安装]

    主要宗旨:不已命令形式操作windows服务 static void Main(string[] args) { var path = @"E:\开发辅助项目\WCF\WCF.Test\WC ...

  2. C#通过SC命令和静态公共类来操作Windows服务

    调用的Windows服务应用程序网址:http://www.cnblogs.com/pingming/p/5115304.html 一.引用 二.公共静态类:可以单独放到类库里 using Syste ...

  3. cmd命令行和bat批处理操作windows服务(转载)

    一.cmd命令行---进行Windows服务操作 1.安装服务 sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32srv ...

  4. C#.NET 操作Windows服务承载WCF

    Windows服务的制作.安装可以参考这篇: C#.NET 操作Windows服务(安装.卸载) - runliuv - 博客园 (cnblogs.com) 本篇会在这个解决方案基础上,继续修改. 一 ...

  5. SC命令---安装、开启、配置、关闭 cmd命令行和bat批处理操作windows服务

      一.cmd命令行---进行Windows服务操作 1.安装服务 sc create 服务名 binPath= "C:\Users\Administrator\Desktop\win32s ...

  6. C#开发人员能够可视化操作windows服务

    使用C#开发自己的定义windows服务是一个很简单的事.因此,当.我们需要发展自己windows它的服务.这是当我们需要有定期的计算机或运行某些程序的时候,我们开发.在这里,我有WCF监听案例,因为 ...

  7. C#.NET 操作Windows服务(安装、卸载)

    注意点: 1.安装时要请求到管理员权限. 2.卸载前,一定要停止掉Windows服务,否则需要重启或注销电脑.代码无法停止服务时,使用services.msc来停止. 开始: 1.新建一个名为&quo ...

  8. C#操作windows服务,安装、卸载、停止、启动

    public class ServiceUtil { private string _ServiceName = string.Empty; private string _AppName = str ...

  9. C#创建Window服务图解,安装、配置、以及C#操作Windows服务

    一.首先打开VS2013,创建Windows服务项目 二.创建完成后对"Service1.cs"重命名位"ServiceDemo":然后切换到代码视图,写个服务 ...

随机推荐

  1. Switch 中参数的范围探讨

    switch 语句必须遵循下面的规则: switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举 ...

  2. 在 VS 2013/2015 中禁用 nuget 包的源代码管理

    对于加入源代码管理如TFS的解决方案,当使用nuget获取包时,下载的包并没有自动从源代码管理中排除,导致包(packages文件夹)会一同上传到服务器. 若要排除nuget包的源代码管理,须在 解决 ...

  3. VS下载Github的项目引用报错

    错误如下 1.添加新的Nuget包源 添加新的源 https://www.nuget.org/api/v2/ 2.还原Nuget包 3.升级Visual Studio到最新 工具-->获取工具和 ...

  4. Java替换中使用正则表达式实现中间模糊匹配

    使用“.+?”实现中间模糊匹配的代码: public class Test { public static void main(String[] args) { String str="总会 ...

  5. [转]Java微服务框架选型(Dubbo 和 Spring Cloud?)

    转载于 http://www.cnblogs.com/xishuai/p/dubbo-and-spring-cloud.html 微服务(Microservices)是一种架构风格,一个大型复杂软件应 ...

  6. SQL语句常用约束类型

    常用五类约束: not null:非空约束,指定某列不为空  unique: 唯一约束,指定某列和几列组合的数据不能重复  primary key:主键约束,指定某列的数据不能重复.唯一  forei ...

  7. 2018谷歌I/O开发者大会8大看点汇总 新品有哪些

    2018谷歌I/O开发者大会8大看点汇总 新品有哪些美国科技媒体The Verge近日撰文,列举了在即将召开的2018年谷歌I/O开发者大会上的8大看点,包括Android P.人工智能等等. 以下为 ...

  8. Centos 7.3下 Linux For SQL Server安装及配置介绍

    Centos 7.3下 Linux For SQL Server安装及配置介绍 高文龙关注13人评论2828人阅读2017-03-05 21:46:21 Centos 7.3下Linux For SQ ...

  9. Confluence 6 增加和减少你许可证的用户数

    增加你许可证的用户数 如果你使用的用户数超过你许可证允许的用户数的话,你的 Confluence 实例将会变成为只读. 只读的意思是没有用户可以创建和编辑内容,直到你的用户数满足你的许可证需求为止. ...

  10. (一)STL体系结构基础介绍

    一.STL六大部件 容器(Containers):存放元素,内存由分配器搞定 分配器(Allocator):支持容器的内存分配 算法:操作容器元素的函数.与OO不同(面向对象将元素与函数放到一个类里) ...