c# Topshelf创建linux与Windows服务

Topshelf

讨厌创建.net 服务时的窗体怎么办?讨厌调试.net服务怎么办?调试.net服务还要自己建控制台怎么办?
Topshelf 它来了!!!
Topshelf 是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
使用Topshelf可以非常方便的将一个C#控制台程序部署成为一个Windows Service,使用它可以很方便的构建跨平台服务寄主,而在调试时直接以控制台的形式运行即可,非常方便。
TopShelf 安装不需要依赖 .net framework 框架中的 InstallUtil.exe 工具

安装Topshelf包

在这里插入图片描述

代码如下,简单粗暴

记得自己创建log文件夹

namespace TopShelfService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
            	if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
                {
                    x.UseEnvironmentBuilder(
                      target => new DotNetCoreEnvironmentBuilder(target)
                    );
                }
                else
                {
                    x.UseEnvironmentBuilder(
                     target => new WindowsHostEnvironmentBuilder(target)
                   );
                }
                x.UseAssemblyInfoForServiceInfo();
                x.Service<WriteTxtClass>(w =>
                {
                    w.ConstructUsing(name => new WriteTxtClass());  //使用 WriteTxtClass实体
                    w.WhenStarted(tc => tc.WriteTxtStart());   //开始服务触发 WriteTxtStart 函数
                    w.WhenStopped(tc => tc.WriteTxtStop());    //结束服务触发 WriteTxtStop 函数
                });


                x.SetServiceName("TopShelfService1"); //服务名
                x.SetDisplayName("TopShelfService1");//服务显示名称
                x.SetInstanceName("TopShelfService1"); //服务显示名称后面的描叙
                x.SetDescription("TopShelfService1 is Test Services"); // 服务描叙
                x.RunAsLocalSystem();
                x.StartAutomatically();


            });
            //Console.WriteLine("Hello World!");
        }

        public class WriteTxtClass
        {
            public void WriteTxtStart()
            {
                try
                {
                    string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt";
                    if (!File.Exists(filePath))
                    {
                        FileStream stream = new FileStream(filePath, FileMode.Create);
                        StreamWriter writer = new StreamWriter(stream, Encoding.Default);
                        writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行
                        writer.Close();//释放内存
                        stream.Close();//释放内存
                    }
                    else
                    {
                        FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖
                        StreamWriter writer = new StreamWriter(stream, Encoding.Default);
                        writer.WriteLine(DateTime.Now.ToString() + ":Start Service");//写入一行,写完后会自动换行
                        writer.Close();//释放内存
                        stream.Close();//释放内存
                    }
                }
                catch (Exception ex)
                {

                    throw;
                }
                
            }
            public void WriteTxtStop()
            {
                try
                {
                    string filePath = AppDomain.CurrentDomain.BaseDirectory + "log\\test.txt";
                    if (!File.Exists(filePath))
                    {
                        FileStream stream = new FileStream(filePath, FileMode.Create);
                        StreamWriter writer = new StreamWriter(stream, Encoding.Default);
                        writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行
                        writer.Close();//释放内存
                        stream.Close();//释放内存
                    }
                    else
                    {
                        FileStream stream = new FileStream(filePath, FileMode.Append);//再原有文件中追加记录,不覆盖
                        StreamWriter writer = new StreamWriter(stream, Encoding.Default);
                        writer.WriteLine(DateTime.Now.ToString() + ":Stop Service");//写入一行,写完后会自动换行
                        writer.Close();//释放内存
                        stream.Close();//释放内存
                    }
                }
                catch (Exception ex)
                {

                    throw;
                }
                
            }
        }
    }
}

卸载服务

用管理员启动控制台,在项目目录下运行以下代码

TopShelfService.exe uninstall
在这里插入图片描述

安装服务

用管理员启动控制台,在项目目录下运行以下代码
TopShelfService.exe install
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值