【问题标题】:Worker Service in .Net Core 3.1 doesn't work after installation.Net Core 3.1 中的 Worker 服务在安装后不起作用
【发布时间】:2021-06-22 15:19:16
【问题描述】:

我创建了一个基本的工作服务,它只通过 .net core 3.1 中的 log4net nugget 包创建一个日志文件。当我运行应用程序的 .exe 文件时,它在调试或发布中运行良好。一旦我安装了服务并从 windows services.msc 启动服务,它就会显示“正在运行”的状态,但后端没有真正发生任何事情。服务似乎根本没有运行。没有创建包含日志文件的日志目录。工作人员服务“登录”为“本地系统帐户”并具有读/写权限。

以下是文件

Worker.cs

using log4net;
using log4net.Config;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Fluent;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;

namespace WorkerService1
{
    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }
        public override async Task StartAsync(CancellationToken cancellationToken)
        {
            // DO YOUR STUFF HERE
            var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
            Log.Info("Connecting to Hub.");
            await base.StartAsync(cancellationToken);
        }
        public override async Task StopAsync(CancellationToken cancellationToken)
        {
            // DO YOUR STUFF HERE
            await base.StopAsync(cancellationToken);
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(1000, stoppingToken);
            }
        }
    }
}

程序.cs

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WorkerService1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .UseWindowsService()
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                });
    }
}

【问题讨论】:

    标签: c# windows-services backgroundworker asp.net-core-3.1


    【解决方案1】:

    LocalSystem Win32 服务从与 exe 所在位置不同的工作目录开始。所以加载像log4net.config 这样的文件不会在当前目录中找到该文件。您需要使用 AppContext.BaseDirectory 之类的东西来找到正确的配置文件位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多