c#用控制台程序安装启动停止卸载服务
第一步:新建控制台项目
第二步:添加服务
第三步:右键新建完成的服务项
点击
在start 和stop事件中分别写上
第四步 编写代码
双击打开
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.ServiceProcess;
- namespace SocketService
- {
- class Program
- {
- #region 可以修改的参数
- //指定服务名称
- private static string ServiceName = "SocketService";
- //更换服务显示名称
- private static string DisplayServiceName = "SocketService";
- //更换服务拓展名
- private static string Extension = ".exe";
- //更改此项即可更换Service
- private static ServiceBase ServiceToRun = new YSocketService();
- #endregion
- static void Main(string[] args)
- {
- if (args.Length > && args[] == "s")
- {
- ServiceBase[] ServicesToRun;
- ServicesToRun = new ServiceBase[]
- {
- ServiceToRun,
- };
- ServiceBase.Run(ServicesToRun);
- }
- else
- {
- Console.WriteLine("通用Service半自动化服务操作启动......");
- bool isExit = false;
- while (!isExit)
- {
- Console.WriteLine("请选择,[1]安装服务 [2]启动服务 [3]停止服务 [4]卸载服务 [5]退出");
- bool IsServiceInstalled = ISWindowsServiceInstalled(ServiceName);
- var rs = Convert.ToInt32(Console.ReadLine());
- switch (rs)
- {
- case :
- //取当前可执行文件路径
- var path = Path.GetFullPath(ServiceName);
- Process.Start("sc", "create " + ServiceName + " binpath= \"" + path + Extension + " s" + "\" displayName= " + DisplayServiceName + " start= auto");
- Console.WriteLine("安装成功");
- break;
- case :
- if (IsServiceInstalled == false)
- {
- Console.WriteLine("服务未安装......");
- break;
- }
- using (ServiceController control = new ServiceController(ServiceName))
- {
- if (control.Status == ServiceControllerStatus.Stopped)
- {
- Console.WriteLine("服务启动......");
- try
- {
- control.Start();
- Console.WriteLine("服务已经启动......");
- }
- catch (Exception)
- {
- Console.WriteLine("无法启动服务!");
- }
- }
- }
- break;
- case :
- if (IsServiceInstalled == false)
- {
- Console.WriteLine("服务未安装......");
- break;
- }
- using (ServiceController control = new ServiceController(ServiceName))
- {
- if (control.Status == ServiceControllerStatus.Running)
- {
- Console.WriteLine("服务停止......");
- try
- {
- control.Stop();
- Console.WriteLine("服务已经停止......");
- }
- catch (Exception)
- {
- Console.WriteLine("无法停止服务!");
- }
- }
- else if ((control.Status == ServiceControllerStatus.Stopped)
- || (control.Status == ServiceControllerStatus.StopPending))
- {
- Console.WriteLine("当前服务未启动......");
- }
- }
- break;
- case :
- if (IsServiceInstalled == false)
- {
- Console.WriteLine("服务未安装......");
- break;
- }
- Process.Start("sc", "delete " + ServiceName);
- Console.WriteLine("卸载成功");
- break;
- case : isExit = true; break;
- default:
- Console.WriteLine("输入错误!");
- isExit = true;
- break;
- }
- }
- }
- }
- /// <summary>
- /// 判断服务是否已经安装
- /// </summary>
- /// <param name="serviceName"></param>
- /// <returns></returns>
- private static bool ISWindowsServiceInstalled(string serviceName)
- {
- try
- {
- return ServiceController.GetServices().Any(c => c.ServiceName == serviceName);
- }
- catch
- { return false; }
- }
- }
- }
第五步 配置log4net文件
新建配置文件
加入代码
- <log4net>
- <logger name="LogHelper">
- <level value="ALL" />
- <appender-ref ref="Appender" />
- </logger>
- <logger name="LogHelperNormal">
- <level value="ALL" />
- <appender-ref ref="NormalAppender" />
- </logger>
- <appender name="Appender" type="log4net.Appender.RollingFileAppender">
- <!--日志文件名开头-->
- <param name="File" value="Log\\" />
- <!--是否追加到文件,默认为true,通常无需设置-->
- <param name="AppendToFile" value="true" />
- <param name="MaxSizeRollBackups" value="" />
- <param name="MaxFileSize" value="" />
- <param name="StaticLogFileName" value="false" />
- <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
- <param name="DatePattern" value="yyyyMMdd"_Exception.htm"" />
- <param name="RollingStyle" value="Date" />
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" />
- </layout>
- </appender>
- <appender name="NormalAppender" type="log4net.Appender.RollingFileAppender">
- <param name="File" value="Log\\" />
- <param name="AppendToFile" value="true" />
- <param name="MaxFileSize" value="" />
- <param name="MaxSizeRollBackups" value="" />
- <param name="StaticLogFileName" value="false" />
- <param name="DatePattern" value="yyyyMMdd"_Normal.htm"" />
- <param name="RollingStyle" value="Date" />
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="<HR COLOR=blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" />
- </layout>
- </appender>
- </log4net>
完成.
最终文件形式如图
其中示例服务的loghelp是使用log4net自己封装了一个类库 使用时候需要把log4net.config文件选择复制到输出目录 不然不会打印日志
示例代码点击下方下载:(含loghelper)
网盘地址 链接: http://pan.baidu.com/s/1boWeHiv 密码: kjp5
c#用控制台程序安装启动停止卸载服务的更多相关文章
- delphi 启动停止windows服务 转
http://blog.csdn.net/haiou327/article/details/6106233 不用cmd用delphi如何实现启动停止windows服务建议参考一下Delphi的Sckt ...
- Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- bat启动/停止oracle服务
原文:bat启动/停止oracle服务 自己的电脑比较慢,尤其装了oracle10g后,服务开启和关闭用bat文件操作省事点 开启服务 @echo offnet start OracleService ...
- 在CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载
转自https://blog.csdn.net/zgf19930504/article/details/51850594 Redis 在Linux 和 在Windows 下的安装是有很大的不同的,和通 ...
- c# windows server安装启动与卸载
使用installutil.exe安装卸载服务时,由于需要指向服务的全路径,由于生成目录往往不是服务发布的最终目录,很不便利,下面介绍两种方式方便操作: 方式一: 项目中加入install.bat与u ...
- Windows下使用service.bat安装tomcat服务, 启动停止tomcat服务
在项目开发过程中,以前只是在Eclipse中配置.启动.停止tomcat服务器 如果只想在机器中使用tomcat服务器,而不想安装MyEclipse,可以使用service.bat 将tomcat安装 ...
- 控制台程序实现利用CRM组织服务和SqlConnection对数据库中数据的增删改查操作
一.首先新建一个控制台程序.命名为TestCol. 二.打开App.config在里面加入,数据库和CRM连接字符串 <connectionStrings> <add name=&q ...
- Delphi启动/停止Windows服务,启动类型修改为"自动"
unit U_StartServices; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...
随机推荐
- C#文件运行类的VB.NET版本号
主要差别在于事件处理要採用AddHandler和RemoveHandler,以及AddressOf三个keyword,其他基本一样. VB的操作稍微繁琐.但仍然能够实现.
- CAS—改动默认登录页
1. 部署CAS-Server 本文以cas-server-3.4.11-release.zip为例.解压提取cas-server-3.4.11/modules/cas-server-webapp- ...
- 解决MyEclipse中导入项目@Override错误
做项目的时候,同事那边电脑上编译通过的java代码,或者是网上下载的例子代码,导入project后却是编译不通过,总是@override报错,把@override去掉就好了,有时候@Override出 ...
- AUTOTRACE
.sqlplus 设置参数 set atuotrace on SET AUTOTRACE OFF --No AUTOTRACE report is generated. This is the def ...
- YTU 2723: 默认参数--求圆的面积
2723: 默认参数--求圆的面积 时间限制: 1 Sec 内存限制: 128 MB 提交: 206 解决: 150 题目描述 根据半径r求圆的面积, 如果不指定小数位数,输出结果默认保留两位小数 ...
- ubuntu安装phpstorm
首先要安装jdk $ java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1 ...
- B1297 [SCOI2009]迷路 矩阵
这个题我觉得很有必要写一篇博客.首先,我们需要知道,假如一个邻接矩阵只有0/1构成,那么它自己的n次方就是走n步之后的方案数.但这个题还有2~9咋办呢.我们观察发现,这个题只有10个点,而且边权< ...
- Systick 更新
之前写的systick_config(loadvalue) 根据系统时钟为72Mhz来写的,如果system clock不是72MHz怎么办? 重新写了一下,先获取,系统时钟频率. //参数为ms v ...
- 特征变化--->索引到标签的转换(IndexToString)
package Spark_MLlib import org.apache.spark.ml.feature.{IndexToString, StringIndexer} import org.apa ...
- 云栖社区> > 正文 永久免费SSL安全证书Letsencrypt安装使用方法
./letsencrypt-auto certonly --standalone --email admin@thing.com -d thing.com -d www.thing.com