Запуск приложения как службу в Windows. FAILED 1053
Собрал приложение, руководствуясь данным туториалом. Запускается и все хорошо работает.
Перенес приложение на сервер. Поскольку я собирал приложение через Publish в Visual Studio с указанием, что хочу иметь один файл, поэтому я переношу три файла .exe, .pdb, settings.json.
Через sc, как указано в руководстве создаю службу
.\sc.exe create "service1" binpath="C:\path\to\publish\service.exe"
И запускаю на сервере
.\sc.exe start "service1"
Получаю ошибку
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion. windows server
Понятное дело, поискал и вот, что перепробовал:
- Манипуляции с
ServicesPipeTimeout-ключом в регистре - Проверены версии
.NETиRuntimeс ними - Обновление системы
Дайте подсказку, как отловить то, что мешает запуску?
Приложение для .NET 6.0, C#, Windows Server 2019
Program.cs
using CsvToDdWorker;
using Microsoft.Extensions.Logging.Configuration;
using Microsoft.Extensions.Logging.EventLog;
using IHost host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
options.ServiceName = "service1";
})
.ConfigureServices(services =>
{
LoggerProviderOptions.RegisterProviderOptions<
EventLogSettings, EventLogLoggerProvider>(services);
services.AddSingleton<SendToDbService>();
services.AddHostedService<WindowsBackgroundService>();
})
.ConfigureLogging((context, logging) =>
{
logging.AddConfiguration(
context.Configuration.GetSection("Logging"));
})
.Build();
await host.RunAsync();
WindowsBackgroundService.cs
namespace CsvToDdWorker
{
public class WindowsBackgroundService : BackgroundService
{
private readonly SendToDbService _sendService;
private readonly ILogger<WindowsBackgroundService> _logger;
public WindowsBackgroundService(
SendToDbService sendService,
ILogger<WindowsBackgroundService> logger) =>
(_sendService, _logger) = (sendService, logger);
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
try
{
while (!stoppingToken.IsCancellationRequested)
{
_sendService.SendToDb(_logger);
await Task.Delay(TimeSpan.FromMinutes(20), stoppingToken);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "{Message}", ex.Message);
Environment.Exit(1);
}
}
}
}
UPD
Попробовал так же поиграться с периодом запуска приложения. Изменял на секунды, минуту, час. Дело не в этом.
UPD1
Запустил исполнение на сервере без службы функцию SendToDb(_logger). на прямую через dotnet run. Она работает без проблем.
Ответы (1 шт):
На самом деле ошибка, которая указана в вопросе очень широкая. Описание, которое прилагается к исключению совсем не несет никакого смысла, вот это
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion. windows server
Что удалось выяснить:
- Моя проблема заключалась в невнимательности при следовании инструкции. В
Publish-рутине в окне всех настроекDeployment mode->Self-containedзабыл указать. - Ошибки, исключения в самой логике приложения никак не влияют на появление данной проблемы. Я инсценировал проблемы, собирал и запускал. Да, приложение крашится, но не в момент запуска службы, а в момент исполнения. И совсем другие коды ошибок.