C# 服务未启动

C# 服务未启动,c#,service,core,kestrel,C#,Service,Core,Kestrel,这不是的重复,因为我已经尝试了推荐的解决方案 我一直在尝试启动我的C/.netCore 3.0/Kestrel作为一项服务 在努力让我的应用程序作为服务启动后,我按照这些命令创建了一个新的exe,结果也是一样的 发布、添加服务并尝试从cmd、powershell或服务接口启动服务后,系统会提示我以下消息: Windows无法在本地计算机上启动SomeWorker服务。 错误1053:服务未响应启动或控制 及时提出请求 在调查系统事件日志时,我只看到一个通用的: 由于以下错误,myWorker服务

这不是的重复,因为我已经尝试了推荐的解决方案

我一直在尝试启动我的C/.netCore 3.0/Kestrel作为一项服务

在努力让我的应用程序作为服务启动后,我按照这些命令创建了一个新的exe,结果也是一样的

发布、添加服务并尝试从cmd、powershell或服务接口启动服务后,系统会提示我以下消息:

Windows无法在本地计算机上启动SomeWorker服务。 错误1053:服务未响应启动或控制 及时提出请求

在调查系统事件日志时,我只看到一个通用的:

由于以下错误,myWorker服务无法启动: 服务未及时响应启动或控制请求

当我运行exe/控制台时,它可以正常启动,没有任何问题

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging(
                options => options.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Information))
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>()
                    .Configure<EventLogSettings>(config =>
                    {
                        config.LogName = "Sample Service";
                        config.SourceName = "Sample Service Source";
                    });
            }).UseWindowsService();
}


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

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

问题是VisualStudio没有设置为将服务部署为自包含的


在项目属性中设置此选项后,一切正常。

不确定这是否有帮助,我遇到了相同的问题。在我的CreateHostBuilder方法中可以归结为:

    host.ConfigureAppConfiguration(
        (hostContext, config) =>
        {
            config.SetBasePath(Directory.GetCurrentDirectory());
            config.AddJsonFile("appsettings.json", false, true);
        }
    );
事实证明,由于调用CreateDefaultBuilder将设置基本路径并添加appsettings.json,因此不再需要上述内容。以下是我的CreateHostBuilder现在的外观,它工作正常:

        var host = Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureLogging(loggingBuilder =>
            {
                var configuration = new ConfigurationBuilder()
                    .AddJsonFile("appsettings.json")
                    .Build();
                var logger = new LoggerConfiguration()
                    .ReadFrom.Configuration(configuration)
                    .CreateLogger();
                loggingBuilder.AddSerilog(logger, dispose: true);
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<SrtLmcoMaximoSyncWorker>();
            });
        return host;

基本上,windows service OnStart事件应该在30秒内完成。我不确定它在.NET核心世界是否仍然适用。你在创业期间做了一些繁重的工作吗?@Thangadurai。一点也不。这也是我的第一本能。我在解决方案中拥有的一切,都是您在上面的代码中看到的。我甚至尝试过通过regedit增加超时,但仍然收到相同的结果。您是否尝试过在某个地方添加System.Diagnostic.Debugger.Break调用,以查看调试会话启动时是否可以继续?我尝试了与您发布的相同的示例。我没有更改任何内容,但它对我有效,我可以在事件查看器中查看日志消息。您能检查您的服务创建/运行的是哪个用户帐户或服务帐户吗?您是如何使该服务成为独立的?@franva我现在记不起确切的方式,而且我附近没有visual studio可供检查,但当您右键单击“发布”时,应该有一个选项来设置一个独立的.net核心发布。我正在使用VS2019。单击发布后,有4个选项:Azure、Docker、文件夹和导入配置文件。我想我需要一些挖掘。谢谢:@Franva:use Folder,然后点击编辑按钮来配置配置文件。嗨@Sebastian我解决了我的问题。我错过了两件事。1.使用Windows服务,2。安装nuget软件包。我在微软文档网站上找到了这两个。