Вопросы

Вывод 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

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

Читать:
Python не в порядке: как подключить другие языки к Python

Поэтому мой вопрос: Как выводить на родительскую консоль из 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

Похожие записи

Plotly Dash — карточки Bootstrap не меняют цвет

admin

Symfony: ошибка установки пакета администрирования sonata

admin

Composer (Airflow) DAG RunID конфликт в GCP

admin

Как преобразовать миллисекунды в минуты: секунды на выходе?

admin

Проблема с интервалом между отступами в файле Prettier vscode json

admin

Получение идентификатора видео YouTube из пользовательского поискового запроса с помощью YouTube API

admin