Я наблюдаю различное поведение в Topshelf в зависимости от того, запускаю ли я приложение в автономном режиме или устанавливается в качестве службы. Я пробовал Topshelf 3.3.1 и 4.1.
Я использую сервис, который реализует ServiceControl, который отлично работает в автономном режиме. При попытке запустить установленную службу я получаю сообщение о том, что службе потребовалось слишком много времени для ответа на контрольные запросы.
var resultCode = HostFactory.Run(x =>
{
x.Service<ServiceControl>(sc =>
{
sc.ConstructUsing(() =>
{
Console.WriteLine("GET INSTANCE!");
return new WorkerService();
});
sc.WhenStarted((s, h) =>
{
Console.WriteLine("START!");
return s.Start(h);
});
sc.WhenStopped((s, h) =>
{
Console.WriteLine("STOP!");
return s.Stop(h);
});
sc.BeforeStartingService(() => Console.WriteLine("BEFORE START!"));
});
x.SetDescription("WorkerService");
x.SetDisplayName("WorkerService");
x.SetServiceName("WorkerService");
});
Это очень подробная версия вызова службы (с большим количеством выводов на консоль), но даже вызовы ConstructUsing
или BeforeStartingService
не производят никакого вывода на консоль, в то время как вызовы журнала внутри Service<>
выход лямбда-продукции.
Я оставлен здесь совершенно невежественным, но также не смог воспроизвести это с минимальной выборкой. Тайм-аут наступает примерно через 3-4 секунды, без каких-либо видимых попыток запустить службу. Запуск служебного потока из основной программы работает без исключения.
Запуск службы с WorkerService.exe
работает должным образом, запуск с WorkerService.exe start
(запускает службу) не работает.
Поскольку это происходит с Topshelf 3 и 4, скорее всего, я что-то не так делаю внутри приложения. Любой указатель в правильном направлении очень ценится.