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

    Topshelf是创建Windows服务的另一种方法。Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。

    一、引用

    新建一个项目,只需要引用Topshelf.dll 即可,为了日志输出显示,建议也同时引用Topshelf.Log4Net。程序安装命令:

    • Install-Package Topshelf
    • Install-Package Topshelf.Log4Net

    二、使用

     1 public class TownCrier
     2 {
     3     readonly Timer _timer;
     4     public TownCrier()
     5     {
     6         _timer = new Timer(1000) {AutoReset = true};
     7         _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now);
     8     }
     9     public void Start() { _timer.Start(); }
    10     public void Stop() { _timer.Stop(); }
    11 }
    12 
    13 public class Program
    14 {
    15     public static void Main()
    16     {
    17         var rc = HostFactory.Run(x =>                                   //1
    18         {
    19             x.Service<TownCrier>(s =>                                   //2
    20             {
    21                s.ConstructUsing(name=> new TownCrier());                //配置一个完全定制的服务,对Topshelf没有依赖关系。常用的方式。
    22                s.WhenStarted(tc => tc.Start());   
    23                s.WhenStopped(tc => tc.Stop());                          
    24             });
    25             x.RunAsLocalSystem();                                       //服务使用NETWORK_SERVICE内置帐户运行。身份标识,有好几种方式,如:
    26                                                                         //x.RunAs("username", "password");  x.RunAsPrompt(); x.RunAsNetworkService(); 等
    27             x.SetDescription("Sample Topshelf Host");                   //安装服务后,服务的描述
    28             x.SetDisplayName("Stuff");                                  //显示名称
    29             x.SetServiceName("Stuff");                                  //服务名称
    30         });                                                             
    31 
    32         var exitCode = (int) Convert.ChangeType(rc, rc.GetTypeCode());  
    33         Environment.ExitCode = exitCode;
    34     }
    35 }

    三、运行

    程序跑起来后,每隔一秒钟有输出,看到的效果如下:

    四、配置成服务运行

    只需要简单配置一下,即可以当服务来使用了。安装很方便:

    安装:TopshelfDemo.exe install
    启动:TopshelfDemo.exe start
    卸载:TopshelfDemo.exe uninstall
     
    安装成功后,接下来,我们就可以看到服务里多了一个服务:
     
     
     
    五、服务使用模式
    Topself的服务一般有主要有两种使用模式。
     
    1、简单模式。继承ServiceControl接口,实现该接口即可。
        HostFactory.New(x =>
        {
            x.Service<MyService>();
        });
        // Service implements the ServiceControl methods directly and has a default constructor
        class MyService : ServiceControl
        {}

    2、自定义模式。配置成完全自定义的服务,不依赖Topshelf.

        HostFactory.New(x =>
        {
            x.Service<MyService>(sc =>
            {
                sc.ConstructUsing(() => new MyService());
    
                // the start and stop methods for the service
                sc.WhenStarted(s => s.Start());
                sc.WhenStopped(s => s.Stop());
    
                // optional pause/continue methods if used
                sc.WhenPaused(s => s.Pause());
                sc.WhenContinued(s => s.Continue());
    
                // optional, when shutdown is supported
                sc.WhenShutdown(s => s.Shutdown());
            });
        });

    深入学习网址:http://docs.topshelf-project.com/en/latest/configuration/quickstart.html

     
     
     
     
     *****************************
     *** Keep learning and growing. ***
     *****************************
  • 相关阅读:
    【转】PHP error_reporting() 错误控制函数功能详解
    第八讲_图像问答Image Question Answering
    C中的继承和多态
    第七讲_图像描述(图说)Image Captioning
    TensorFlow 之 高层封装slim,tflearn,keras
    第六讲_图像分割Image Segmentation
    第五讲_图像识别之图像检测Image Detection
    Tensorflow 之 TensorBoard可视化Graph和Embeddings
    第四讲_图像识别之图像分类Image Classification
    理解Neural Style
  • 原文地址:https://www.cnblogs.com/gangle/p/9321563.html
Copyright © 2011-2022 走看看