Topshelf 支持Mono 扩展Topshelf.Linux

使用Topshelf 5步创建Windows 服务 这篇文章大家可以了解到使用Topshelf可以很好的支持Windows服务的开发,但是它和Mono不兼容,Github上有一个扩展https://github.com/pruiz/Topshelf.Linux 可以很好兼容Linux/Mono,本文介绍使用方法:

1、在项目中添加Topshelf.Linux, 通过Nuget 很方便的添加引用:

2、在代码中加入下面一行代码UseLinuxIfAvailable() :

  class Program
    {
        static ILog _log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            XmlConfigurator.ConfigureAndWatch(
                new FileInfo("log4net.config"));

            var host = HostFactory.New(x =>
            {
                x.Service<SampleService>(s =>
                {
                    s.ConstructUsing(() => new SampleService());
                    s.WhenStarted(v => v.Start());
                    s.WhenStopped(v => v.Stop());

                });
                x.UseLinuxIfAvailable(); 
                x.RunAsLocalSystem();
                x.UseLog4Net();
                x.SetDescription("SampleService Description");
                x.SetDisplayName("SampleService");
                x.SetServiceName("SampleService");
            });
            host.Run();
        }

这样你的基于Topshelf Windows服务就完成了兼容Mono的改造工作。但是要注意的是在Mono下支持命令行运行,不能使用Topshelf的命令行Start,Stop控制服务等,这对于Linux环境来说足够了,可以通过rc-scripts来完成这些工作。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android源码框架分析

Android6.0权限适配及兼容库的实现

从6.0 MarshMallow开始,Android支持动态权限管理,即有些权限需要在使用到的时候动态申请,根据用户的选择需要有不同的处理,具体表现可以看下图:

16620
来自专栏QQ音乐技术团队的专栏

Android点九图总结以及在聊天气泡中的使用

点九图的本质实际上是在图片的四周各增加了1px的像素,并使用纯黑的线进行标记,其它的与原图没有任何区别。

97730
来自专栏高性能服务器开发

windows完成端口(六)

系列目录 windows完成端口(一) windows完成端口(二) windows完成端口(三) windows完成端口(四) windows完成端口(五) ...

36540
来自专栏圣杰的专栏

Asp.net mvc 知多少(一)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想...

28670
来自专栏進无尽的文章

实践-小细节Ⅳ

网上有很多方法,尝试起来都很麻烦,我这个方法还是比较简单的。 解决方法: 我们在手机用数据线连接到电脑时,会弹出很多手机里面的图片,你的隐私尽收眼底(好尴尬...

12710
来自专栏MasiMaro 的技术博文

socket模型处理多个客户端

最近学完了简单的socket编程,发现其实socket的网络编程其实并没有什么难度,只是简单的函数调用,记住客户端与服务端的步骤,写起来基本没有什么问题。 ...

28820
来自专栏Android源码框架分析

Android权限管理原理(4.3-6.x)

Android系统在MarshMallow之前,权限都是在安装的时候授予的,虽然在4.3时,Google就试图在源码里面引入AppOpsManager来达到动态...

34170
来自专栏24K纯开源

OpenProcess打开进程返回错误的问题

问题描述       项目中需要做一个小功能:能够查看系统中当前正在运行的进程的内存信息,如内存块类型、分配状态、访问权限等。如下图所示: ?       需要...

482100
来自专栏FreeBuf

Windows DNS API RCE漏洞分析及PoC构造

根据 Microsoft 2017 年 10 月安全通告,多个版本 Windows 中的 dnsapi.dll 在处理 DNS response 时可导致 SY...

381100
来自专栏问天丶天问

AJAX 表单序列化

25230

扫码关注云+社区

领取腾讯云代金券