如何利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务

发布时间:2021-11-18 17:10:20 作者:柒染
来源:亿速云 阅读:155

如何利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务

在现代软件开发中,将应用程序部署为Windows服务是一种常见的需求,尤其是对于那些需要长时间运行、无需用户交互的后台任务。.NET Core提供了Generic Host模型,使得构建后台服务变得更加简单和灵活。然而,.NET Core本身并不直接支持将应用程序部署为Windows服务。这时,我们可以借助Topshelf库来实现这一目标。

本文将详细介绍如何利用Topshelf将基于.NET Core Generic Host的应用程序部署为Windows服务。

1. 什么是Topshelf?

Topshelf是一个开源的.NET库,它简化了将.NET应用程序部署为Windows服务的过程。使用Topshelf,开发者可以专注于业务逻辑的实现,而不必关心Windows服务的底层细节。Topshelf提供了简单的API,允许开发者通过几行代码将控制台应用程序转换为Windows服务。

2. 创建.NET Core Generic Host应用程序

首先,我们需要创建一个基于.NET Core Generic Host的应用程序。Generic Host是.NET Core中用于构建后台服务和通用主机应用程序的框架。它提供了依赖注入、配置管理、日志记录等功能。

2.1 创建项目

使用以下命令创建一个新的.NET Core控制台应用程序:

dotnet new console -n MyBackgroundService
cd MyBackgroundService

2.2 添加依赖

接下来,我们需要添加Microsoft.Extensions.HostingTopshelf的NuGet包:

dotnet add package Microsoft.Extensions.Hosting
dotnet add package Topshelf

2.3 实现Generic Host

Program.cs中,我们可以使用Generic Host来构建我们的后台服务。以下是一个简单的示例:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace MyBackgroundService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<MyBackgroundService>();
                })
                .Build();

            host.Run();
        }
    }

    public class MyBackgroundService : BackgroundService
    {
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                Console.WriteLine("Background service is running...");
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}

在这个示例中,我们创建了一个MyBackgroundService类,它继承自BackgroundService,并在ExecuteAsync方法中实现了一个简单的循环任务。

3. 使用Topshelf部署为Windows服务

现在,我们已经有了一个基于Generic Host的应用程序,接下来我们将使用Topshelf将其部署为Windows服务。

3.1 修改Program.cs

我们需要修改Program.cs,以便使用Topshelf来启动和停止我们的Generic Host应用程序。以下是修改后的代码:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
using Topshelf;

namespace MyBackgroundService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            HostFactory.Run(hostConfigurator =>
            {
                hostConfigurator.Service<MyBackgroundServiceHost>(serviceConfigurator =>
                {
                    serviceConfigurator.ConstructUsing(() => new MyBackgroundServiceHost());
                    serviceConfigurator.WhenStarted(service => service.Start());
                    serviceConfigurator.WhenStopped(service => service.Stop());
                });

                hostConfigurator.RunAsLocalSystem();
                hostConfigurator.SetServiceName("MyBackgroundService");
                hostConfigurator.SetDisplayName("My Background Service");
                hostConfigurator.SetDescription("A sample background service using .NET Core Generic Host and Topshelf.");
            });
        }
    }

    public class MyBackgroundServiceHost
    {
        private IHost _host;

        public void Start()
        {
            _host = Host.CreateDefaultBuilder()
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<MyBackgroundService>();
                })
                .Build();

            _host.Start();
        }

        public void Stop()
        {
            _host?.StopAsync().GetAwaiter().GetResult();
            _host?.Dispose();
        }
    }

    public class MyBackgroundService : BackgroundService
    {
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                Console.WriteLine("Background service is running...");
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}

在这个修改后的版本中,我们创建了一个MyBackgroundServiceHost类,它负责启动和停止Generic Host。然后,我们使用Topshelf的HostFactory来配置和运行服务。

3.2 安装服务

在项目目录下,使用以下命令构建项目:

dotnet publish -c Release -o ./publish

然后,使用管理员权限打开命令提示符,导航到publish目录,并运行以下命令来安装服务:

MyBackgroundService.exe install

3.3 启动服务

安装完成后,可以使用以下命令启动服务:

MyBackgroundService.exe start

3.4 卸载服务

如果需要卸载服务,可以使用以下命令:

MyBackgroundService.exe uninstall

4. 总结

通过Topshelf,我们可以轻松地将基于.NET Core Generic Host的应用程序部署为Windows服务。Topshelf提供了简单的API和配置选项,使得开发者可以专注于业务逻辑的实现,而不必关心Windows服务的底层细节。

本文介绍了如何创建一个基于Generic Host的应用程序,并使用Topshelf将其部署为Windows服务。希望这篇文章能帮助你更好地理解如何将.NET Core应用程序部署为Windows服务。

推荐阅读:
  1. C#怎么用Topshelf创建Windows服务
  2. .NET Core3.0实现创建Worker Services的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

windows topshelf

上一篇:Docker Registry v2如何搭建

下一篇:Openstack搭建过程中配置的小技巧有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》