2009-02-20 7 views
8

Esto es un poco molesto porque ahora no tengo el código en frente de mí, pero trataré de explicarlo.¿Por qué C# ProcessStartInfoRedirectStandardOutput hará que el proceso de xcopy falle

Tengo una aplicación C# simple que inicia una secuencia de comandos de Ruby (hace un par de otras cosas, por lo que genera un archivo por lotes y lo ejecuta).

Estoy utilizando el objeto C# proceso y me puse la redirectstandardoutput siguiente = true redirectstandarderror = true UseShellExecute = false CreateNoWindow = true (preciosa poco de lógica al revés allí!)

entonces crear dos hilos y sondear ReadLine() para las secuencias de error y de salida, esperando que ambas finalicen antes de llamar a WaitForExit().

Ahora, no importa lo que haga, mi script de Ruby no llama a un comando de sistema ("xcopy ...") cuando redirijo la salida (no se generan errores, simplemente no se copia). Tampoco copia otros archivos que solicito copiar.

Esto ocurre si dirijo ambas secuencias a una secuencia, una de ellas, solo redirige una de ellas y simplemente llamo ReadToEnd().

Solo funciona correctamente si establezco redirectstandardoutput y redirectstandarderror en false.

Estoy perdido aquí. Pensé que tal vez el flujo de salida se estaba completando, pero no puedo imaginar por qué si llamo a ReadLine (necesito leer la línea para poder analizar cada línea y solo presentar las relevantes para el usuario final). También pensé que quizás llamar dos comandos de un proceso C# enhebrado podría causar problemas.

¿Alguien tiene alguna idea de lo que podría estar pasando aquí? Debo decir que estoy en VS .net 2005, que creo que es .Net Framework 2.0.

Respuesta

9

Hay un obscure post on the MSDN forums que parece indicar que puede haber una falla con XCOPY. Si redirige XCOPY STDOUT, también debe redirigir STDIN.

(nota: estoy marcando esto un wiki de la comunidad, así que alguien que conoce rubí podría escribir un código de ejemplo para redirigir STDIN para el sistema())

+0

Este era el problema. Simplemente configuro processToRun.StartInfo.RedirectStandardInput = true y xcopy funcionó perfectamente. Curiosamente cuando tenía la salida funcionando, iba a redirigir la entrada de todos modos. –

+0

¡Gracias! Tuve el mismo problema con una gran secuencia de comandos por lotes y probé todo hasta que encontré esto. – Botz3000

Cuestiones relacionadas