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

Справочная информация: я пытаюсь добавить возможности командной строки и пакетной обработки в существующий WPFWindows Application, При обнаружении некоторых опций при запуске я подавляю появление окна, выполняю некоторую обработку и сразу же завершаю работу. Теперь, поскольку пользовательский интерфейс отсутствует, я хотел бы выводить некоторые сообщения в stdout / stderr. Рассмотрим следующий код:

<code>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);
        }
    }
}
</code>

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

<code>Start
Stop
</code>

Но вместо этого:

<code>C:\test>WpfConsoleTest.exe

C:\test>
</code>

Выcan перенаправить вывод, хотя:

<code>C:\test>WpfConsoleTest.exe > out.txt

C:\test>type out.txt
Start
Stop
</code>

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

<code>C:\test>WpfConsoleTest.exe > CON

C:\test>
</code>

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

<code>C:\test>WpfConsoleTest.exe > out.txt & type out.txt

C:\test>
</code>

Но:

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

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

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

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

Поэтому мой вопрос:How to output to parent console from WPF Windows Application? Кроме того, почему так сложно получить stdout / stderr из WPF?

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос