简单实现Windows服务 TopShelf

Nugut安装 log4net 和 topShelf

1)ServiceRunner类

using log4net;
using Topshelf;

class ServiceRunner : ServiceControl//, ServiceSuspend
{
private Timer _timer = null;
readonly ILog _log = LogManager.GetLogger(typeof(ServiceRunner));

public ServiceRunner()
{
double interval = 5000;
_timer = new Timer(interval);
_timer.Elapsed += new ElapsedEventHandler(OnTick);
}

protected virtual void OnTick(object sender, ElapsedEventArgs e)
{
_log.Debug("Tick:" + DateTime.Now.ToLongTimeString());
}
public bool Start(HostControl hostControl)
{
 
this._timer = new Timer(1000);
this._timer.Elapsed += this.OnTick;
return true;
}

public bool Stop(HostControl hostControl)
{
 
this._timer.Enabled = false;
this._timer.AutoReset = false;
return true;
}

public void Start()
{
_log.Info("SampleService is Started");

_timer.AutoReset = true;
_timer.Enabled = true;
_timer.Start();
}

public void Stop()
{
_log.Info("SampleService is Stopped");

_timer.AutoReset = false;
_timer.Enabled = false;
}
}

然后在Main函数中调用

static void Main(string[] args)
{
InitLog4Net();
var logger = LogManager.GetLogger(typeof(Program));

logger.Info("消息");

HostFactory.Run(x =>
{

x.UseLog4Net("~/log4net.config");

x.Service<ServiceRunner>();

x.SetDescription("Sample Topshelf Host");
x.SetDisplayName("Stuff");
x.SetServiceName("Stuff");
x.RunAsLocalSystem();
x.EnablePauseAndContinue();
});

}

private static void InitLog4Net()
{
var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
XmlConfigurator.ConfigureAndWatch(logCfg);
}

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name= "File" value= "D:\Log\servicelog\"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--log保留天数-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--日志文件名是否是固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:2008-08-31.log-->
<param name= "DatePattern" value= "yyyy-MM-dd&quot;.read.log&quot;"/>
<!--日志根据日期滚动-->
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
</layout>
</appender>

<!-- 控制台前台显示日志 -->
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="ERROR" />
<foreColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="Info" />
<foreColor value="Green" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
</layout>

<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Info" />
<param name="LevelMax" value="Fatal" />
</filter>
</appender>

<root>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<level value="all" />
<appender-ref ref="ColoredConsoleAppender"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>

编译成功后

在Cmd.exe里执行安装  ServiceRunner.exe install

卸载  ServiceRunner.exe uninstall

运行就用 ServiceRunner.exe start

时间: 2024-08-04 14:31:15

简单实现Windows服务 TopShelf的相关文章

使用Topshelf组件构建简单的Windows服务

很多时候都在讨论是否需要了解一个组件或者一个语言的底层原理这个问题,其实我个人觉得,对于这个问题,每个人都有自己的看法,个人情况不同,选择的方式也就会不同了.我个人觉得无论学习什么,都应该尝试着去了解对应的原理和源码(这里就不要急着吐槽,容我说完).对底层的了解不是为了让你写出类似的东西,让你写也不可能写的出来,重写一个就需要以此修改整个底层结构,了解底层知识只是为了让你可以在写业务代码时,选择合适的方式,以此使底层与业务层配合达到效率最佳.任何一种方式有坏有好,需要合适的选择. 如果觉得楼主以

简单的Windows 服务的安装和卸载

步骤: 1.运行--〉cmd:打开cmd命令框 2.在命令行里定位到InstallUtil.exe所在的位置 InstallUtil.exe 默认的安装位置是在C:/Windows/Microsoft.NET/Framework/v2.0.50727里面,所以你要在cmd里通过cd定位到该位置(cd C:/Windows/Microsoft.Net/Framework/v2.0.50727) 3.操作命令: 1). 安装服务命令:在命令行里输入下面的命令: InstallUtil.exe  Pa

如何使用Topshelf管理Windows服务

一.官方网站及源码下载 1.官方网站:http://topshelf-project.com/ 2.源码下载:https://github.com/Topshelf/Topshelf/downloads 二.使用Topshelf创建服务 1 static void Main(string[] args) 2 { 3 HostFactory.Run(x => 4 { 5 x.Service<MyService>(dtService => 6 { 7 ServiceConfigurat

windows服务创建

前段时间出去面试,技术太菜各种被狂虐,又问到windows服务相关之类的事情,现在睡不着,起来刚好粗略的研究了一把,话不多说. 解决方案: 1.打开VS,新建项目 -windows服务 创建完成后打开Services1.cs 2.右击界面,添加安装程序 这时候会发现多出如下几个文件 修改安装时账号 另外可以修改服务名称和服务启动方式 3.修改后编译一下,打开编译后的exe文件 编译完成后需要InstallUtil.exe 来安装服务,这时候打开framework默认安装位置,找到这个可执行文件

创建第一个windows服务

windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志. 计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行. 可以通过选择菜单"开始"-〉"控制面板"-〉"管理工具"-〉"服务"来查看现有系统中的服务,如下图: 创建一个windows服务 切换到代码视图修改. using System; using

.net windows 服务创建、安装、卸载和调试

原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行. 可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图: 创建window 服务 新建一个wind

[转]Windows 服务

原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行. 可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图: 创建window 服务 新建一个

C#创建windows服务并发布

创建window 服务 新建一个window 服务项目MyService,如下图 切换到代码视图修改. [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Ser

topshelf包装redis为windows服务

topshelf包装redis为windows服务 Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Windows Service,利用windows installer实现的.如果使用topshelf,岂不是可以兼容mono,于是自己动手写了,实现很简单,代码已发布到github上 redis-topshelf. 如何使用? 1.打卡配置文件,配置文件描述如下: redis.service.name