【windows服务】使用TopShelf创建Windows服务

1、创建项目

2、使用nuget安装Topshelf和Topshelf.Log4Net(记录日志)

3、创建MyService

using System;
using System.Timers;
using log4net;


namespace TopshelfDemo
{
    public class MyService
    {   
        readonly Timer _timer;
        readonly ILog _log = LogManager.GetLogger(typeof(MyService));

        public MyService()
        {
            _timer = new Timer(1000) { AutoReset = true };
            _timer.Elapsed += new ElapsedEventHandler(OnTick);
            _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now);
        }
        protected virtual void OnTick(object sender, ElapsedEventArgs e)
        {
            _log.Debug("Tick:" + DateTime.Now.ToLongTimeString());
        }
        public void Start()
        {
            _log.Info("Service is Started");
            _timer.Start();
           
        }
        public void Stop()
        {
            _log.Info("Service is Stopped");
            _timer.Stop();
           
        }
    }
}

4、定义InitWindowsService方法并在Main方法中调用

using log4net.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Topshelf;

namespace TopshelfDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            InitWindowsService();
        }
        
        /// <summary>
        /// 初始化windows服务
        /// </summary>
        private static void InitWindowsService()
        {
            FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
            XmlConfigurator.ConfigureAndWatch(fi);


            HostFactory.Run(x =>
            {
                x.Service<MyService>(sc =>
                {
                    sc.ConstructUsing(name => new MyService());
                    sc.WhenStarted(tc => tc.Start());
                    sc.WhenStopped(tc => tc.Stop());
                });
                x.RunAsLocalSystem();

                x.SetDescription("Sample Topshelf Host");
                x.SetDisplayName("TopshelfDemo");
                x.SetServiceName("TopshelfDemo");
                x.UseLog4Net();
            });
        }
    }
}

5、编译整个项目,使用命令行注册服务

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值