Ejecuto el cmd ftp.exe a través de C# System.Diagnostics.Process type. Y utilizo el siguiente código para obtener el resultado "ftp.exe" luego de ingresar programáticamente un comando de "ayuda". Pero solo puedo obtener la primera línea del resultado. Y nunca llego a la parte de salida "final". Todo el programa parece bloqueado.¿Por qué no puedo obtener el resultado de ftp.exe por código?
Process p = new Process();
p.StartInfo.FileName = @"C:\Windows\System32\ftp.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.StandardInput.WriteLine("help");
Int32 c_int = p.StandardOutput.Read();
while (c_int != -1)
{
Char c = (Char)c_int;
Console.Write(c);
c_int = p.StandardOutput.Read();
}
Console.WriteLine("end");
Sin embargo, os escribo un programa simple que sólo utilice Console.WriteLine() para escribir alguna salida a su flujo de salida estándar. Y lo pruebo con el código anterior. Funciona bien. Simplemente no puedo entender por qué el código anterior no puede funcionar con ftp.exe? La única diferencia entre mi programa SimpleConsoleOutput y el "ftp.exe" es que ftp.exe tiene su propio símbolo del sistema interactivo.
(--------------- Nuevo Progreso -----------------)
Acá algunos avances de mi investigación personal
escribo 2 hilos para escribir en el StdIn y leídos de StdOut de "ftp.exe", y la salida es la siguiente:
Commands may be abbreviated. Commands are:
Commands may be abbreviated. Commands are:
Commands may be abbreviated. Commands are:
....(exactly 16 times of above lines and then exactly 16 times of the following cmds list)
! delete literal prompt send
? debug ls put status
append dir mdelete pwd trace
...
y la última lista de comandos no es aún completa.
Parece que la salida del comando de ayuda se divide en dos partes.
La primera parte es:
Commands may be abbreviated. Commands are:
La segunda parte es:
! delete literal prompt send
? debug ls put status
append dir mdelete pwd trace
...
y todas las partes están 1ª wrtten a la corriente de StdOut "ftp.exe" antes de todas las partes 2ª . ¿Cómo puede ser esto? Gracias por tus comentarios.
He probado con otro comando de la "ftp.exe", y parece normal excepto el comando "ayuda"
Solo por curiosidad ¿por qué estás tan interesado en la salida del ftp.exe si no la intención de usarlo? – CResults
Hola, CResults. Estoy investigando sobre las transmisiones estándar de las aplicaciones de consola. Y ftp.exe es uno de mis objetivos de experimento. – smwikipedia