Antecedentes: Tengo dificultades para agregar capacidades de procesamiento por lotes y línea de comandos a una aplicación de Windows WPF existente. Cuando detecto algunas opciones al inicio, evito que aparezca la ventana, hago algún procesamiento y salgo de inmediato. Ahora, como no hay interfaz de usuario, me gustaría enviar algunos mensajes a stdout/stderr. Considere siguiente código:Consola de salida.WriteLine de WPF Aplicaciones de Windows a la consola real
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);
}
}
}
Cuando corro de línea de comandos que se esperaría siguiente resultado:
Start
Stop
Pero en su lugar:
C:\test>WpfConsoleTest.exe
C:\test>
Usted puede redirigir la salida, sin embargo:
C:\test>WpfConsoleTest.exe > out.txt
C:\test>type out.txt
Start
Stop
CON redirigir a no funciona, por desgracia:
C:\test>WpfConsoleTest.exe > CON
C:\test>
Otro problema es que se cierra WpfConsoleTest.exe immedietaly después del arranque. Por lo tanto:
C:\test>WpfConsoleTest.exe > out.txt & type out.txt
C:\test>
Pero:
C:\test>WpfConsoleTest.exe > out.txt & ping localhost > nul & type out.txt
Start
Stop
La mejor solución que era capaz de venir con hasta ahora es utilizar start /B /wait
:
C:\test>start /B /wait WpfConsoleTest.exe > out.txt & type out.txt
Start
Stop
Este enfoque es sobre todo bien - si envuelves en un bate puedes conservar el código de error, etc. La única gran caída es que obtienes resultados una vez que finaliza la aplicación, es decir, no hay manera de que puedas seguir el progreso, tienes que esperar a que todo lo que está pasando termine.
Por lo tanto, mi pregunta es: Cómo dar salida a la consola principal de WPF Aplicación de Windows? Además, ¿por qué es tan difícil obtener stdout/stderr de WPF?
Sé que podría cambiar el tipo de aplicación a Console Application en la configuración del proyecto, pero esto tiene un desagradable efecto secundario: la ventana de la consola está visible todo el tiempo, incluso si simplemente hace doble clic en el exe. This solution tampoco funciona, porque crea una nueva consola, incluso si la aplicación se ejecutó desde cmd.
EDIT: para aclarar, yo quiero que mi aplicación para la salida de la consola existente si hay uno y no para crear uno nuevo si no se encuentra.
Pregunta similar: http://stackoverflow.com/questions/160587/no-output-to-console-from-a-wpf-application –
El enlace a esta pregunta ya estaba en el último párrafo de mi pregunta. – gwiazdorrr