Проблема в том, что когда я запускаю службу Windows из-под OctopusDeploy
, то, если служба не запускается - сообщение об ошибке недостаточно описательно. Я использую .net core 3.1
и Microsoft.Extensions.Hosting.WindowsServices
пакет для создания windows сервиса. Локально воспроизвести проблему легко:
Start-Service MySvc
следующая ошибка отображается из PowerShell
Start-Service: Service 'MySv c (MySv c) 'невозможно запустить из-за следующей ошибки: Не удается запустить службу MySv c на компьютере'. '. В строке: 1 символ: 1
Start-Service MySv c
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceCommand
Как видите, отсутствует какая-либо информация о сообщении об ошибке.
Конструктор выглядит так:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.DoCustomLogic();
services.AddHostedService<Mysvc>();
})
.ConfigureLogging(loggingBuilder =>
{
loggingBuilder
.AddConsole(options => { options.IncludeScopes = true; })
.AddEventLog();
});
На самом деле я точно знаю, какое исключение выдается в методе DoCustomLogic()
(реальный код для простоты очищен ):
public static void DoCustomLogic(this IServiceCollection services)
{
string exMsg = "my custom exception";
throw new Exception(exMsg);
}
Кроме того, после неудачного запуска - в Event Viewer
есть 2 новые записи:
Выводы .Net runtime
:
Application: MySvc.exe
CoreCLR Version: 4.700.19.60701
.NET Core Version: 3.1.1
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Exception: my custom exception
...
Exception Info: System.Exception: my custom exception
Так что, в принципе, я тот, кто на самом деле выдает исключение, и я точно знаю, в чем заключается ошибка. Мой вопрос: возможно ли вывести на консоль powershell
более значимую информацию об исключениях такого типа?
Для пользователей, использующих Octopus Deploy
, - интуитивно понятно, что нет фактическое сообщение об ошибке отображается в журналах, поэтому они должны войти на сервер и проверить журналы просмотра событий.
Я думаю, что одним из возможных решений было бы создание сценария после сборки, который проверял бы события .. но я бы лучше решил это с C# если возможно ..