Вывод Console.WriteLine из приложений Windows WPF в фактическую консоль

Предыстория: я изо всех сил пытаюсь добавить возможности командной строки и пакетной обработки к существующему приложению Windows WPF. Когда я обнаруживаю некоторые параметры при запуске, я подавляю появление окна, выполняю некоторую обработку и немедленно закрываю. Теперь, поскольку нет пользовательского интерфейса, я хотел бы вывести некоторые сообщения на stdout / stderr. Рассмотрим следующий код:

namespace WpfConsoleTest { public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { Console.WriteLine(«Start»); System.Threading.Thread.Sleep(1000); Console.WriteLine(«Stop»); Shutdown(0); } } }

Когда я запускаю из командной строки, я ожидаю следующего вывода:

Start Stop

Но вместо:

C:test>WpfConsoleTest.exe C:test>

Однако вы можете перенаправить вывод:

C:test>WpfConsoleTest.exe > out.txt C:test>type out.txt Start Stop

К сожалению, перенаправление на CON не работает:

C:test>WpfConsoleTest.exe > CON C:test>

Другая проблема заключается в том, что WpfConsoleTest.exe завершает работу немедленно после запуска. Так:

C:test>WpfConsoleTest.exe > out.txt & type out.txt C:test>

Но:

C:test>WpfConsoleTest.exe > out.txt & ping localhost > nul & type out.txt Start Stop

Лучшее решение, которое мне удалось найти до сих пор, — использовать start /B /wait:

C:test>start /B /wait WpfConsoleTest.exe > out.txt & type out.txt Start Stop

Этот подход в основном подходит — если вы обернете его в летучую мышь, вы можете сохранить код ошибки и так далее. Единственный серьезный недостаток заключается в том, что вы получаете результат после завершения приложения, то есть вы не можете отслеживать прогресс, вам нужно дождаться завершения всего, что происходит.

Поэтому мой вопрос: Как выводить на родительскую консоль из WPF Windows Application? Кроме того, почему так сложно получить stdout / stderr из WPF?

Я знаю, что могу изменить тип приложения на Console Application в настройках проекта, но это имеет неприятный побочный эффект — окно консоли отображается все время, даже если вы просто дважды щелкните exe. Это решение также не годится, поскольку оно создает новую консоль, даже если приложение было запустить из cmd.

РЕДАКТИРОВАТЬ: чтобы уточнить, я хочу, чтобы мое приложение выводило на существующую консоль, если она есть, и не для создания новой, если она отсутствует.

Аналогичный вопрос: stackoverflow .com / questions / 160587 /.   —  person gwiazdorrr    schedule 02.05.2012

Ссылка на этот вопрос была уже в последнем абзаце моего вопроса.   —  person gwiazdorrr    schedule 02.05.2012

Источник: ledsshop.ru

Стиль жизни - Здоровье!