with winform ejecutar desde comandos c# .net debugging console

c# - ejecutar - show console in winform



Captura de la salida de la consola desde una aplicación.NET(C#) (7)

Agregué varios métodos de ayuda a la plataforma O2 (proyecto de código abierto) que le permiten programar fácilmente una interacción con otro proceso a través de la salida y entrada de la consola (consulte http://code.google.com/p/o2platform/source/browse/trunk/O2_Scripts/APIs/Windows/CmdExe/CmdExeAPI.cs )

También es útil para usted la API que permite ver la salida de la consola del proceso actual (en una ventana emergente o de control existente). Vea esta publicación en el blog para más detalles: http://o2platform.wordpress.com/2011/11/26/api_consoleout-cs-inprocess-capture-of-the-console-output/ (este blog también contiene detalles de cómo consumir la salida de la consola de nuevos procesos)

¿Cómo invoco una aplicación de consola desde mi aplicación .NET y capturo todo el resultado generado en la consola?

(Recuerde, no quiero guardar la información primero en un archivo y luego volver a publicar como me gustaría recibirla en vivo).


De PythonTR - Python Programcıları Derneği, e-kitap, örnek :

Process p = new Process(); // Create new object p.StartInfo.UseShellExecute = false; // Do not use shell p.StartInfo.RedirectStandardOutput = true; // Redirect output p.StartInfo.FileName = "c://python26//python.exe"; // Path of our Python compiler p.StartInfo.Arguments = "c://python26//Hello_C_Python.py"; // Path of the .py to be executed


Esto mejora un poco la respuesta aceptada de @mdb. Específicamente, también capturamos la salida de error del proceso. Además, capturamos estos resultados a través de eventos porque ReadToEnd () no funciona si desea capturar el error y la salida regular. Me tomó un tiempo hacer que esto funcione porque realmente también requiere llamadas BeginxxxReadLine () después de Start ().

using System.Diagnostics; Process process = new Process(); void LaunchProcess() { process.EnableRaisingEvents = true; process.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(process_OutputDataReceived); process.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(process_ErrorDataReceived); process.Exited += new System.EventHandler(process_Exited); process.StartInfo.FileName = "some.exe"; process.StartInfo.Arguments = "param1 param2" process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); process.BeginErrorReadLine(); process.BeginOutputReadLine(); //below line is optional if we want a blocking call //process.WaitForExit(); } void process_Exited(object sender, EventArgs e) { Console.WriteLine(string.Format("process exited with code {0}/n", process.ExitCode.ToString())); } void process_ErrorDataReceived(object sender, DataReceivedEventArgs e) { Console.WriteLine(e.Data + "/n"); } void process_OutputDataReceived(object sender, DataReceivedEventArgs e) { Console.WriteLine(e.Data + "/n"); }


Esto se puede lograr fácilmente utilizando la propiedad ProcessStartInfo.RedirectStandardOutput . Una muestra completa está contenida en la documentación de MSDN vinculada; la única advertencia es que es posible que tenga que redirigir la secuencia de error estándar para ver todos los resultados de su aplicación.

Process compiler = new Process(); compiler.StartInfo.FileName = "csc.exe"; compiler.StartInfo.Arguments = "/r:System.dll /out:sample.exe stdstr.cs"; compiler.StartInfo.UseShellExecute = false; compiler.StartInfo.RedirectStandardOutput = true; compiler.Start(); Console.WriteLine(compiler.StandardOutput.ReadToEnd()); compiler.WaitForExit();



ConsoleAppLauncher es una biblioteca de código abierto creada específicamente para responder esa pregunta. Captura todos los resultados generados en la consola y proporciona una interfaz simple para iniciar y cerrar la aplicación de la consola.

El evento ConsoleOutput se activa cada vez que la consola escribe una línea nueva en la salida estándar / de error. Las líneas están en cola y garantizadas para seguir el orden de salida.

También disponible como paquete NuGet .

Ejemplo de llamada para obtener la salida de la consola completa:

// Run simplest shell command and return its output. public static string GetWindowsVersion() { return ConsoleApp.Run("cmd", "/c ver").Output.Trim(); }

Muestra con comentarios en vivo:

// Run ping.exe asynchronously and return roundtrip times back to the caller in a callback public static void PingUrl(string url, Action<string> replyHandler) { var regex = new Regex("(time=|Average = )(?<time>.*?ms)", RegexOptions.Compiled); var app = new ConsoleApp("ping", url); app.ConsoleOutput += (o, args) => { var match = regex.Match(args.Line); if (match.Success) { var roundtripTime = match.Groups["time"].Value; replyHandler(roundtripTime); } }; app.Run(); }


process.StartInfo.**CreateNoWindow** = true; agregado process.StartInfo.**CreateNoWindow** = true; y timeout

private static void CaptureConsoleAppOutput(string exeName, string arguments, int timeoutMilliseconds, out int exitCode, out string output) { using (Process process = new Process()) { process.StartInfo.FileName = exeName; process.StartInfo.Arguments = arguments; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.CreateNoWindow = true; process.Start(); output = process.StandardOutput.ReadToEnd(); bool exited = process.WaitForExit(timeoutMilliseconds); if (exited) { exitCode = process.ExitCode; } else { exitCode = -1; } } }