Saída do Console.WriteLine do WPF Windows Applications para o console real

Plano de fundo: Estou lutando para adicionar recursos de linha de comando e processamento em lote a um WPF existenteAplicativo do Windows. Quando detecto algumas opções na inicialização, evito que a janela apareça, faça algum processamento e saia imediatamente. Agora, como não há interface do usuário, gostaria de enviar algumas mensagens para stdout / stderr. Considere o seguinte código:

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

Quando executo a partir da linha de comando, eu esperaria a seguinte saída:

<code>Start
Stop
</code>

Mas ao invés:

<code>C:\test>WpfConsoleTest.exe

C:\test>
</code>

Vocêposso redirecionar a saída, embora:

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

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

Redirecionar para CON não funciona, infelizmente:

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

C:\test>
</code>

Outro problema é que o WpfConsoleTest.exe fechaimmedietaly depois do começo. Assim:

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

C:\test>
</code>

Mas:

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

A melhor solução que eu pude chegar até agora é usarstart /B /wait:

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

Esta abordagem é basicamente ok - se você colocar em um morcego você pode preservar o código de erro e assim por diante. A única grande queda é que você obtém a saída após o término do aplicativo, ou seja, não há como acompanhar o andamento, você tem que esperar o que quer que esteja acabando.

Portanto, minha pergunta é:Como saída para o console pai do WPFAplicativo do Windows? Além disso, por que é tão difícil pegar o stdout / stderr do WPF?

Eu sei que eu poderia mudar o tipo de aplicativo paraAplicação de console nas configurações do projeto, mas isso tem um efeito colateral desagradável - a janela do console fica visível o tempo todo, mesmo que você simplesmente clique duas vezes no exe.Esta solução também não serve, porque criaum novo console, mesmo se o aplicativo foi executado a partir do cmd.

EDIT: para esclarecer, eu quero o meu aplicativo para a saída para oexistir console, se houver um enão para criar um novo se estiver faltando.

questionAnswers(4)

yourAnswerToTheQuestion