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

 更新时间:2023年06月19日 10:51:26   作者:故里2130  
本文主要介绍了.NET6创建Windows服务的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

之前的文章已经写过了创建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.现在就和正常的服务一样了,有开始,有停止,操作后,然后打开日志,可以看到服务的记录。

到此这篇关于.NET6创建Windows服务的实现步骤的文章就介绍到这了,更多相关.NET6创建Windows服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解析Asp.net,C# 纯数字加密解密字符串的应用

    解析Asp.net,C# 纯数字加密解密字符串的应用

    本篇文章是对Asp.net,C# 纯数字加密解密字符串的应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 如何取得Repeater控件选择的项目及注意事项

    如何取得Repeater控件选择的项目及注意事项

    Repeater控件,每个item前有一个CheckBox,把选择的item列显出来,有两个地方需要注意的,就是CheckBox与Label,这个Label是随你需要获取的内容而变化喔。如你想获取Nickname,那你需要把绑定的的内容放在Label上
    2013-01-01
  • C#可以减少或不使用switch有什么方法

    C#可以减少或不使用switch有什么方法

    减少或不使用switch,大家有什么好的方法,使用工厂方法来处理,可以创建一个工厂接口,然后每个方法设计为一个工厂类,并实现工厂接口,感兴趣的朋友可以了解下
    2013-03-03
  • .Net 如何限制用户登录的方法

    .Net 如何限制用户登录的方法

    这篇文章主要介绍了.Net 如何限制用户登录的方法,有需要的朋友可以参考一下
    2013-12-12
  • .NET Core3.1发布(翻译)

    .NET Core3.1发布(翻译)

    这篇文章主要介绍了.NET Core3.1发布(翻译),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • asp.net 数据库的连接和datatable类

    asp.net 数据库的连接和datatable类

    asp.net下数据库的连接与数据库datatable类实现代码。
    2009-05-05
  • ASP.NET返回上一页面的实现代码

    ASP.NET返回上一页面的实现代码

    今天用ASP.NET做一个类似淘宝中的订单管理系统,遇到的问题:主界面通过一个超链接跳转到子界面后,试了好长时间还是无法从子界面返回主界面。
    2011-04-04
  • ASP.Net 图片存入数据库的实现代码

    ASP.Net 图片存入数据库的实现代码

    在很多时候,我们有这样的需求:把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。
    2008-11-11
  • ASP.NET中AJAX的异步加载(Demo演示)

    ASP.NET中AJAX的异步加载(Demo演示)

    这篇文章主要介绍了ASP.NET中AJAX的异步加载(Demo演示),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Repeater控件实现编辑、更新、删除等操作示例代码

    Repeater控件实现编辑、更新、删除等操作示例代码

    如何在Repeater控件中实现像GridView控件一样的编辑、更新、删除功能?下面有个不错的示例,感兴趣的朋友可以参考下,希望对大家有所帮助
    2014-01-01

最新评论