第一步:新建控制台项目

 第二步:添加服务

第三步:右键新建完成的服务项

点击

在start 和stop事件中分别写上 

 第四步 编写代码

双击打开

  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Linq;
  5. using System.ServiceProcess;
  6.  
  7. namespace SocketService
  8. {
  9. class Program
  10. {
  11. #region 可以修改的参数
  12. //指定服务名称
  13. private static string ServiceName = "SocketService";
  14. //更换服务显示名称
  15. private static string DisplayServiceName = "SocketService";
  16. //更换服务拓展名
  17. private static string Extension = ".exe";
  18. //更改此项即可更换Service
  19. private static ServiceBase ServiceToRun = new YSocketService();
  20. #endregion
  21. static void Main(string[] args)
  22. {
  23. if (args.Length > && args[] == "s")
  24. {
  25. ServiceBase[] ServicesToRun;
  26. ServicesToRun = new ServiceBase[]
  27. {
  28. ServiceToRun,
  29. };
  30. ServiceBase.Run(ServicesToRun);
  31. }
  32. else
  33. {
  34. Console.WriteLine("通用Service半自动化服务操作启动......");
  35. bool isExit = false;
  36. while (!isExit)
  37. {
  38. Console.WriteLine("请选择,[1]安装服务 [2]启动服务 [3]停止服务 [4]卸载服务 [5]退出");
  39. bool IsServiceInstalled = ISWindowsServiceInstalled(ServiceName);
  40. var rs = Convert.ToInt32(Console.ReadLine());
  41. switch (rs)
  42. {
  43. case :
  44. //取当前可执行文件路径
  45. var path = Path.GetFullPath(ServiceName);
  46. Process.Start("sc", "create " + ServiceName + " binpath= \"" + path + Extension + " s" + "\" displayName= " + DisplayServiceName + " start= auto");
  47. Console.WriteLine("安装成功");
  48. break;
  49. case :
  50. if (IsServiceInstalled == false)
  51. {
  52. Console.WriteLine("服务未安装......");
  53. break;
  54. }
  55. using (ServiceController control = new ServiceController(ServiceName))
  56. {
  57. if (control.Status == ServiceControllerStatus.Stopped)
  58. {
  59. Console.WriteLine("服务启动......");
  60. try
  61. {
  62. control.Start();
  63. Console.WriteLine("服务已经启动......");
  64. }
  65. catch (Exception)
  66. {
  67. Console.WriteLine("无法启动服务!");
  68. }
  69. }
  70. }
  71. break;
  72. case :
  73. if (IsServiceInstalled == false)
  74. {
  75. Console.WriteLine("服务未安装......");
  76. break;
  77. }
  78. using (ServiceController control = new ServiceController(ServiceName))
  79. {
  80. if (control.Status == ServiceControllerStatus.Running)
  81. {
  82. Console.WriteLine("服务停止......");
  83. try
  84. {
  85. control.Stop();
  86. Console.WriteLine("服务已经停止......");
  87. }
  88. catch (Exception)
  89. {
  90. Console.WriteLine("无法停止服务!");
  91. }
  92. }
  93. else if ((control.Status == ServiceControllerStatus.Stopped)
  94. || (control.Status == ServiceControllerStatus.StopPending))
  95. {
  96. Console.WriteLine("当前服务未启动......");
  97. }
  98. }
  99. break;
  100. case :
  101. if (IsServiceInstalled == false)
  102. {
  103. Console.WriteLine("服务未安装......");
  104. break;
  105. }
  106. Process.Start("sc", "delete " + ServiceName);
  107. Console.WriteLine("卸载成功");
  108. break;
  109. case : isExit = true; break;
  110. default:
  111. Console.WriteLine("输入错误!");
  112. isExit = true;
  113. break;
  114. }
  115. }
  116. }
  117. }
  118. /// <summary>
  119. /// 判断服务是否已经安装
  120. /// </summary>
  121. /// <param name="serviceName"></param>
  122. /// <returns></returns>
  123. private static bool ISWindowsServiceInstalled(string serviceName)
  124. {
  125. try
  126. {
  127. return ServiceController.GetServices().Any(c => c.ServiceName == serviceName);
  128. }
  129. catch
  130. { return false; }
  131. }
  132. }
  133. }

第五步 配置log4net文件

新建配置文件

加入代码

  1. <log4net>
  2. <logger name="LogHelper">
  3. <level value="ALL" />
  4. <appender-ref ref="Appender" />
  5. </logger>
  6. <logger name="LogHelperNormal">
  7. <level value="ALL" />
  8. <appender-ref ref="NormalAppender" />
  9. </logger>
  10. <appender name="Appender" type="log4net.Appender.RollingFileAppender">
  11. <!--日志文件名开头-->
  12. <param name="File" value="Log\\" />
  13. <!--是否追加到文件,默认为true,通常无需设置-->
  14. <param name="AppendToFile" value="true" />
  15. <param name="MaxSizeRollBackups" value="" />
  16. <param name="MaxFileSize" value="" />
  17. <param name="StaticLogFileName" value="false" />
  18. <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
  19. <param name="DatePattern" value="yyyyMMdd&quot;_Exception.htm&quot;" />
  20. <param name="RollingStyle" value="Date" />
  21. <layout type="log4net.Layout.PatternLayout">
  22. <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
  23. </layout>
  24. </appender>
  25. <appender name="NormalAppender" type="log4net.Appender.RollingFileAppender">
  26. <param name="File" value="Log\\" />
  27. <param name="AppendToFile" value="true" />
  28. <param name="MaxFileSize" value="" />
  29. <param name="MaxSizeRollBackups" value="" />
  30. <param name="StaticLogFileName" value="false" />
  31. <param name="DatePattern" value="yyyyMMdd&quot;_Normal.htm&quot;" />
  32. <param name="RollingStyle" value="Date" />
  33. <layout type="log4net.Layout.PatternLayout">
  34. <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
  35. </layout>
  36. </appender>
  37. </log4net>

完成.

最终文件形式如图

其中示例服务的loghelp是使用log4net自己封装了一个类库 使用时候需要把log4net.config文件选择复制到输出目录 不然不会打印日志

示例代码点击下方下载:(含loghelper)

网盘地址 链接: http://pan.baidu.com/s/1boWeHiv 密码: kjp5

c#用控制台程序安装启动停止卸载服务的更多相关文章

  1. delphi 启动停止windows服务 转

    http://blog.csdn.net/haiou327/article/details/6106233 不用cmd用delphi如何实现启动停止windows服务建议参考一下Delphi的Sckt ...

  2. Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

    RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

  3. bat启动/停止oracle服务

    原文:bat启动/停止oracle服务 自己的电脑比较慢,尤其装了oracle10g后,服务开启和关闭用bat文件操作省事点 开启服务 @echo offnet start OracleService ...

  4. 在CentOS 7中启动/停止/重启服务

    RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

  5. Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载

    转自https://blog.csdn.net/zgf19930504/article/details/51850594 Redis 在Linux 和 在Windows 下的安装是有很大的不同的,和通 ...

  6. c# windows server安装启动与卸载

    使用installutil.exe安装卸载服务时,由于需要指向服务的全路径,由于生成目录往往不是服务发布的最终目录,很不便利,下面介绍两种方式方便操作: 方式一: 项目中加入install.bat与u ...

  7. Windows下使用service.bat安装tomcat服务, 启动停止tomcat服务

    在项目开发过程中,以前只是在Eclipse中配置.启动.停止tomcat服务器 如果只想在机器中使用tomcat服务器,而不想安装MyEclipse,可以使用service.bat 将tomcat安装 ...

  8. 控制台程序实现利用CRM组织服务和SqlConnection对数据库中数据的增删改查操作

    一.首先新建一个控制台程序.命名为TestCol. 二.打开App.config在里面加入,数据库和CRM连接字符串 <connectionStrings> <add name=&q ...

  9. Delphi启动/停止Windows服务,启动类型修改为"自动"

    unit U_StartServices; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...

随机推荐

  1. C#文件运行类的VB.NET版本号

    主要差别在于事件处理要採用AddHandler和RemoveHandler,以及AddressOf三个keyword,其他基本一样. VB的操作稍微繁琐.但仍然能够实现.

  2. CAS—改动默认登录页

    1.  部署CAS-Server 本文以cas-server-3.4.11-release.zip为例.解压提取cas-server-3.4.11/modules/cas-server-webapp- ...

  3. 解决MyEclipse中导入项目@Override错误

    做项目的时候,同事那边电脑上编译通过的java代码,或者是网上下载的例子代码,导入project后却是编译不通过,总是@override报错,把@override去掉就好了,有时候@Override出 ...

  4. AUTOTRACE

    .sqlplus 设置参数 set atuotrace on SET AUTOTRACE OFF --No AUTOTRACE report is generated. This is the def ...

  5. YTU 2723: 默认参数--求圆的面积

    2723: 默认参数--求圆的面积 时间限制: 1 Sec  内存限制: 128 MB 提交: 206  解决: 150 题目描述 根据半径r求圆的面积, 如果不指定小数位数,输出结果默认保留两位小数 ...

  6. ubuntu安装phpstorm

    首先要安装jdk $ java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1 ...

  7. B1297 [SCOI2009]迷路 矩阵

    这个题我觉得很有必要写一篇博客.首先,我们需要知道,假如一个邻接矩阵只有0/1构成,那么它自己的n次方就是走n步之后的方案数.但这个题还有2~9咋办呢.我们观察发现,这个题只有10个点,而且边权< ...

  8. Systick 更新

    之前写的systick_config(loadvalue) 根据系统时钟为72Mhz来写的,如果system clock不是72MHz怎么办? 重新写了一下,先获取,系统时钟频率. //参数为ms v ...

  9. 特征变化--->索引到标签的转换(IndexToString)

    package Spark_MLlib import org.apache.spark.ml.feature.{IndexToString, StringIndexer} import org.apa ...

  10. 云栖社区> > 正文 永久免费SSL安全证书Letsencrypt安装使用方法

    ./letsencrypt-auto certonly --standalone --email admin@thing.com -d thing.com -d www.thing.com