Topshelf允许我们快速的开发、调试和部署windows服务。
官方网站
Install-Package Topshelf
Install-Package Topshelf.Log4Net
虽然安装Topshelf.Log4Net不是必须的,不过建议安装。
ServiceRunner.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;using System.IO;using Topshelf;using log4net;using log4net.Config;namespace WHTR.Demos.Topshelf{ public sealed class ServiceRunner : ServiceControl, ServiceSuspend { PRivate static ILog Logger = LogManager.GetLogger(typeof(Program)); private Timer timer; static ServiceRunner() { var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"); xmlConfigurator.ConfigureAndWatch(logCfg); } public bool Start(HostControl hostControl) { this.timer = new Timer(new TimerCallback(this.PrintMessage), null, 1000, 1000); return true; } public bool Stop(HostControl hostControl) { throw new NotImplementedException(); } public bool Continue(HostControl hostControl) { throw new NotImplementedException(); } public bool Pause(HostControl hostControl) { throw new NotImplementedException(); } private void PrintMessage(object state) { Logger.Info(DateTime.Now); } }}
备注:要实现的接口及方法名意义非常明显,这里就不做过多说明了。
Program.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Topshelf;using Topshelf.ServiceConfigurators;namespace TopshelfDemos{ class Program { static void Main(string[] args) { HostFactory.Run(x => { //x.UseLog4Net("~/log4net.config"); x.Service<ServiceRunner>(); x.SetDescription("TopshelfDemos说明"); x.SetDisplayName("TopshelfDemos显示名称"); x.SetServiceName("TopshelfDemos服务名称"); x.EnablePauseAndContinue(); }); } }}
以前以为开发Windows服务是多么高大上的东西,没想到这么简单。就两步,引用Topshelf.dll,然后实现接口,完成。
新闻热点
疑难解答