Wyjście Console.WriteLine z aplikacji WPF Windows do rzeczywistej konsoli

Tło: Walczę o dodanie możliwości wiersza poleceń i przetwarzania wsadowego do istniejącego WPFAplikacja Windows. Kiedy wykryję niektóre opcje podczas uruchamiania, wyłączam wyświetlanie okna, wykonuję przetwarzanie i natychmiast zamykam. Teraz, ponieważ nie ma interfejsu użytkownika, chciałbym wysłać kilka wiadomości do stdout / stderr. Rozważ następujący kod:

<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>

Gdy uruchamiam z linii poleceń, spodziewam się następującego wyjścia:

<code>Start
Stop
</code>

Lecz:

<code>C:\test>WpfConsoleTest.exe

C:\test>
</code>

tymogą przekierowanie danych wyjściowych:

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

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

Przekierowanie do CON nie działa, niestety:

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

C:\test>
</code>

Innym problemem jest to, że WpfConsoleTest.exe kończy działanienatychmiast po starcie. Więc:

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

C:\test>
</code>

Ale:

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

Najlepszym rozwiązaniem, z jakim mogłem do tej pory przyjść, jest użyciestart /B /wait:

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

Podejście to jest w większości dobre - jeśli zapakujesz go w bat, możesz zachować kod błędu i tak dalej. Jedynym ogromnym minusem jest to, że otrzymujesz dane wyjściowe po zakończeniu aplikacji, tj. Nie ma możliwości śledzenia postępów, musisz poczekać na wszystko, co się skończy.

Dlatego moje pytanie brzmi:Jak wyprowadzić do nadrzędnej konsoli z WPFAplikacja Windows? Ponadto, dlaczego tak trudno zdobyć stdout / stderr z WPF?

Wiem, że mogę zmienić typ aplikacji naAplikacja konsoli w ustawieniach projektu, ale ma to paskudny efekt uboczny - okno konsoli jest widoczne cały czas, nawet jeśli po prostu dwukrotnie klikniesz exe.To rozwiązanie też nie zrobi, ponieważ tworzynowy konsola, nawet jeśli aplikacja została uruchomiona z cmd.

EDYTUJ: aby wyjaśnić, chcę, aby moja aplikacja wyświetlała dane wistniejący konsola, jeśli jest inie aby utworzyć nowy, jeśli go brakuje.

questionAnswers(4)

yourAnswerToTheQuestion