Подтвердить что ты не робот

Console.WriteLine() внутри службы Windows?

В настоящее время я использую TopShelf с консольным приложением для создания службы Windows. Когда я запускаю код в качестве консольного приложения, я использую несколько Console.WriteLine() для вывода результатов. Как только код выполняет то, что он должен делать, я устанавливаю консольное приложение в качестве службы Windows.

Есть ли недостатки с оставлением кода Console.WriteLine(), хотя служба Windows не может писать на консоль? Есть ли риск наличия неустойчивого кода, если я оставлю Console.WriteLine() там?

4b9b3361

Ответ 1

Выход будет просто отброшен.

В службе Windows нет консоли, поэтому вывод Console.Write * отбрасываются. Существует несколько альтернатив:

  • Класс System.Diagnostics.Trace имеет аналогичный интерфейс с Класс консоли, чтобы вы могли легко перенести свой код на это.
  • Затем его можно настроить для вывода в файл. Вы можете использовать System.Diagnostics.EventLog для записи в журнал событий, который затем можно отслеживать с помощью средства просмотра событий.
  • Вы можете использовать сторонний библиотека с открытым исходным кодом log4net, которая очень гибкая.

Ответ 2

Нет, класс консоли будет безопасно записываться в STDOUT, но вы просто не увидите вывод.

Ответ 3

Если вы используете функцию System.Diagnostics.Trace, вы можете перенаправить вывод с помощью прослушивателей и переключателей. Если вы скомпилируете символ TRACE, тогда код будет включен. Если вы не добавите TRACE, он не будет скомпилирован в проект.

Если вы запускаете свои службы в качестве консоли для отладки, Trace будет выводиться на консоль по умолчанию. Я взял использование Trace вместо Debug или Console, так как я могу из файла конфигурации выводить информацию о трассировке в любую комбинацию файлов, экрана, базы данных и т.д.

Ответ 4

Выход всегда удалялся до Windows Server 2008R2. Оставьте консоль .writeline() в службе, установленной на этой ОС, и вы получите сообщение об ошибке 1067 при запуске/запуске службы в зависимости от положения строки().