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 ...
随机推荐
- MapR CEO对2016大数据的5个预測
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2016/02/mapr-ceo-5-big-data-predictions MapR ...
- 性能测试实战-XYB项目-内网访问
使用内网服务器,linux host绑定域名,相当于ip地址+域名的host绑定,只不过这里的ip是yc-sparks.schoolis.cn
- android中ping命令的实现
/** * 推断Ping 网址是否返回成功 * * @param netAddress * @return */ public static String isPingSuccess(int pin ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 36.面板Ext.Panel使用
转自:https://www.cnblogs.com/linjiqin/archive/2011/06/22/2086620.html 面板Ext.Panel使用 概要 1.Ext.Panel概述 2 ...
- D. Toy Sum(cf)
http://codeforces.com/problemset/problem/405/D 题意:已知集合S={1,2,3......1000000},s=1000000,从集合S中选择n个数,X= ...
- jquery插件开发基本步骤
一.介绍 插件编写的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护. JQuery除了提供一个简单.有效的方式进行管理元素以及脚本,它还还提供了例外一种机制:即给核心 ...
- javascript中for...in和for...of的区别
for...of循环是ES6引入的新的语法. for...in遍历拿到的x是键(下标).而for...of遍历拿到的x是值,但在对象中会提示不是一个迭代器报错.例子如下: let x; let a = ...
- HDU 5279 分治NTT 图的计数
思路: 显然每个子图内都是森林 去掉所有子图1和n都连通且每条大边都存在的情况 直接DP上 NTT优化一波 注意前两项的值.. //By SiriusRen #include <bits/std ...
- 【洛谷4933】大师(DP)
题目: 洛谷4933 分析: (自己瞎yy的DP方程竟然1A了,写篇博客庆祝一下) (以及特斯拉电塔是向Red Alert致敬吗233) 这里只讨论公差不小于\(0\)的情况,小于\(0\)的情况进行 ...