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.