使用.NET 6.0创建Worker Service服务程序,并注册Windows服务程序

  • program
IHost host = Host.CreateDefaultBuilder(args)
      .UseWindowsService(options =>
      {
          //服务进行命名,会显示在Windows服务中的服务名称上
          options.ServiceName = "H";
      }).ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
        services.AddLogging();
    }).ConfigureLogging(logging =>
    {
        //记录日志
        logging.AddNLog("NLog.config");
    })
    .Build();

 

  • Worker类

包含一些tcp通讯的逻辑 主要创建服务方法如此 相关功能按需修改

  public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private IConfiguration _configuration;
        MyTcpClient tcpClient = MyTcpClient.getInstance();
        public Worker(ILogger<Worker> logger, IConfiguration configuration)
        {
            _configuration = configuration;
            _logger = logger;

            tcpClient.Port = _configuration["SocketServer:Port"];
            tcpClient.Address = _configuration["SocketServer:IP"];

            _logger.LogInformation($"当前客户端  {_configuration["SocketServer:ClientId"]}  配置:ServerIp:{_configuration["SocketServer:IP"]}:{_configuration["SocketServer:Port"]}");
            tcpClient.Connect();
            tcpClient.AsyncOperation = AsyncOperationManager.CreateOperation(null);
            tcpClient.Receive += TcpClient_Receive;
            //tcpClient.StartConnect();
        }

        private void TcpClient_Receive(object? sender, TEventArgs<string> e)
        {
            _logger.LogInformation(e.Result.ToString());
            var GSProcess = new GSProcess();
            _logger.LogInformation(JsonConvert.SerializeObject(GSProcess.GetAllProcess()));
            //GSProcess.Kill();

        }

        /// <summary>
        /// 服务启动时执行的操作
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public override async Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Worker StartAsync at: {time}", DateTimeOffset.Now);
            await base.StartAsync(cancellationToken);
        }

        /// <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);
            //    await Task.Delay(1000, stoppingToken);
            //}

        }

        /// <summary>
        /// 服务停止时执行的操作
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public override async Task StopAsync(CancellationToken cancellationToken)
        {
            tcpClient.Stop();
            _logger.LogInformation("Worker StopAsync at: {time}", DateTimeOffset.Now);
            await base.StopAsync(cancellationToken);
        }

        /// <summary>
        /// 运行时执行的方法
        /// </summary>
        /// <param name="stoppingToken"></param>
        /// <returns></returns>
        private Task ServiceRunningMethod(CancellationToken stoppingToken)
        {
            return Task.Run(() => { }, stoppingToken);
        }

    }

 

  • 添加进服务

可以手扣命令 或者使用NSSM软件

相关介绍 https://juejin.cn/post/6981055330964733989

 

 

 

 

 

posted @ 2023-03-21 01:41  Echo_xxx  阅读(77)  评论(0编辑  收藏  举报