.NET6创建Windows服务的实现步骤

寻技术 Windows / ASP.NET编程 2023年10月22日 153

之前的文章已经写过了创建Windows服务。

C#创建Windows服务

 不过之前使用的是.NET Framework创建的Windows服务。现在已经2023年了,其中vs2022有新的方法去创建Windows服务,本次使用.NET6创建Windows服务。

1.选择如图所示,其中vs2022这样的,vs2019不一样,但是都是worker service

2.创建完成是这样的

3.安装Microsoft.Extensions.Hosting.WindowsServices

这里注意版本,选择的是net6,好像只能安装6版本的。

 nuget里面安装

4.服务命名,Program.cs文件

namespace WorkerServiceDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            IHost host = Host.CreateDefaultBuilder(args)
                 .UseWindowsService(options =>
                 {
                     //给服务命名,在Windows服务中的会显示名字
                     options.ServiceName = "NET6故里2130";
                 })
                .ConfigureServices(services =>
                {
                    services.AddHostedService<Worker>();
                })
                .Build();
            host.Run();
        }
    }
}

5.服务里面写启动,停止,以及执行任务,Worker.cs中写

里面的业务就是,检测启动,停止,每次执行任务都输出

namespace WorkerServiceDemo
{
    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly string filePath = "D:\\Service1.txt";
        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="stoppingToken"></param>
        /// <returns></returns>
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                using (FileStream stream = new FileStream(filePath, FileMode.Append))
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine($"{DateTimeOffset.Now},服务执行!");
                }
                await Task.Delay(1000, stoppingToken);
            }
        }
        /// <summary>
        /// 服务启动
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public override Task StartAsync(CancellationToken cancellationToken)
        {
            using (FileStream stream = new FileStream(filePath, FileMode.Append))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.WriteLine($"{DateTime.Now},服务启动!");
            }
            return base.StartAsync(cancellationToken);
        }
        /// <summary>
        /// 服务停止
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public override Task StopAsync(CancellationToken cancellationToken)
        {
            using (FileStream stream = new FileStream(filePath, FileMode.Append))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.WriteLine($"{DateTime.Now},服务停止!");
            }
            return base.StopAsync(cancellationToken);
        }
    }
}

6.效果

7.实际情况,我们肯定不是这么使用,但是这样调试肯定是可以的,接下来,我们安装此服务,变成Windows服务的样子,首选先进行发布

8.执行此命令

sc.exe create "故里2130" binpath="D:\code\WorkerService1\WorkerServiceDemo\bin\Release\net6.0\publish\WorkerServiceDemo.exe"

9.此时打开Windows服务,看到已经有了

10.现在就和正常的服务一样了,有开始,有停止,操作后,然后打开日志,可以看到服务的记录。

关闭

用微信“扫一扫”