zoukankan      html  css  js  c++  java
  • 使用Topshelf创建Windows 服务

    转自:http://blog.csdn.net/huwei2003/article/details/42168655

    使用Topshelf创建Windows 服务

    这是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf(http://www.christophdebaene.com/blog/2011/03/16/create-a-net-windows-service-in-5-steps-with-topshelf/)通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务。Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。

    1、Topshelf的代码托管在http://topshelf-project.com/,可以在这里下载到最新的代码。
    2、使用Visual Studio创建一个控制台应用程序引用程序集TopShelf.dll 合log4net.dll 。
    用nuget 查找topshelf 安装 topshelf和 topshelf.log4net 即可

    3、创建一个简单的服务类,里面包含两个方法Start和Stop,这个服务只是演示代码,所以我们每隔5秒输出一个日志。

    using System;
    using System.Timers;
    using log4net;

    namespace SampleWindowsService
    {
        public class SampleService
        {
            private Timer _timer = null;
            readonly ILog _log = LogManager.GetLogger(typeof(SampleService));

            public SampleService()
            {
                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 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;
            }
        }
    }

    4、在Main方法中使用Topshelf宿主我们的服务,主要是告诉Topshelf如何设置我们的服务的配置和启动和停止的时候的方法调用。

    using System.IO;
    using log4net.Config;
    using Topshelf;

    namespace SampleWindowsService
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlConfigurator.ConfigureAndWatch(
                    new FileInfo(".\log4net.config"));
                    //要添加log4net.config到项目中

                var host = HostFactory.New(x =>
                {
                    x.EnableDashboard(); //有问题则注释掉该行
                    x.Service<SampleService>(s =>
                    {
                        s.SetServiceName("SampleService");//有问题则注释掉该行
                        s.ConstructUsing(name => new SampleService());
                        s.WhenStarted(tc =>
                        {
                            XmlConfigurator.ConfigureAndWatch(
                                new FileInfo(".\log4net.config"));
                            tc.Start();
                        });
                        s.WhenStopped(tc => tc.Stop());
                    });

                    x.RunAsLocalSystem();
                    x.SetDescription("SampleService Description");
                    x.SetDisplayName("SampleService");
                    x.SetServiceName("SampleService");
                });

                host.Run();
            }
        }
    }
    4、配置Log4net和运行我们的服务,服务可以当作控制台来运行,这在开发的时候是非常方便的。服务的安装很方便
    SampleWindowsService.exe install
    安装成功后,可以通过服务控制台启动,或者也可以通过一下命令运行
    SampleWindowsService.exe start
    服务的卸载方法也非常简单了

    SampleWindowsService.exe uninstall

    代码下载 http://download.csdn.net/detail/huwei2003/8302099  [vs2013 nuget引用包]

  • 相关阅读:
    容器跨主机网络通信学习笔记(以Flannel为例)
    Kubernetes控制器Job和CronJob
    记一次使用Flannel插件排错历程
    Kubernetes控制器Deployment
    Kubernetes如何通过StatefulSet支持有状态应用?
    react18 来了,我 get 到...
    gojs 实用高级用法
    vuecli3 vue2 保留 webpack 支持 vite 成功实践
    calibre 报错 This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 解决
    unable to recognize "*.yaml": no matches for kind "RoleBinding" in version "rbac.authorization.k8s.io/v1beta1"
  • 原文地址:https://www.cnblogs.com/georgewangii/p/4621690.html
Copyright © 2011-2022 走看看