2011-05-14 12 views

Respuesta

4

Este ejemplo asume una aplicación de Windows Forms con dos cuadros de texto (RunResults y Errors).

// Remember to also add a using System.Diagnostics at the top of the class 
private void RunIt_Click(object sender, EventArgs e) 
{ 
    using (Process p = new Process()) 
    { 
     p.StartInfo.WorkingDirectory = "<path to batch file folder>"; 
     p.StartInfo.FileName = "<path to batch file itself>"; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.RedirectStandardError = true; 
     p.Start(); 
     p.WaitForExit(); 

     // Capture output from batch file written to stdout and put in the 
     // RunResults textbox 
     string output = p.StandardOutput.ReadToEnd(); 
     if (!String.IsNullOrEmpty(output) && output.Trim() != "") 
     { 
      this.RunResults.Text = output; 
     } 

     // Capture any errors written to stderr and put in the errors textbox. 
     string errors = p.StandardError.ReadToEnd(); 
     if (!String.IsNullOrEmpty(errors) & errors.Trim() != "")) 
     { 
      this.Errors.Text = errors; 
     } 
    } 
} 

Actualizado:

El ejemplo anterior es un evento de clic de botón de un botón llamado RunIt. Hay un par de cuadros de texto en el formulario, RunResults y Errors donde escribimos los resultados de stdout y stderr.

+0

@Kev Hola, gracias, ¿cómo se inicializaría esto en un cuadro de texto, por ejemplo? – Mike

+0

@Mike - He actualizado mi respuesta, ¿es eso lo que quieres decir? – Kev

+0

@Kev, Hola, eso es gracias, lo he hecho como está escrito, aunque obtengo algunos errores de compilación, creo que esto podría deberse a que estoy usando NET Framework 3.5/VS 2008 (intentará actualizar ...), – Mike

5
+0

@Will A Hola, gracias por la pronta respuesta, aunque ¿cómo implementarla en un formulario? – Mike

+0

@Mike, exactamente como está escrito, Mike, o ¿realmente desea ejecutar el archivo por lotes y mostrar el resultado dentro de la interfaz de usuario en el formulario? –

+0

@Will A Sí, me gustaría que la salida se muestre dentro de la interfaz de usuario en el formulario – Mike

1

Deduzco que por ejecutándose dentro de un formulario GUI significa que muestra los resultados de ejecución dentro de algunos UI-Control.

Tal vez algo como esto:

private void runSyncAndGetResults_Click(object sender, System.EventArgs e)  
{ 
    System.Diagnostics.ProcessStartInfo psi = 
     new System.Diagnostics.ProcessStartInfo(@"C:\batch.bat"); 

    psi.RedirectStandardOutput = true; 
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
    psi.UseShellExecute = false; 

    System.Diagnostics.Process batchProcess; 
    batchProcess = System.Diagnostics.Process.Start(psi); 

    System.IO.StreamReader myOutput = batchProcess.StandardOutput; 
    batchProcess.WaitForExit(2000); 
    if (batchProcess.HasExited) 
    { 
     string output = myOutput.ReadToEnd(); 

     // Print 'output' string to UI-control 
    } 
} 

Ejemplo tomado de here.

+0

¿cómo llamarías a esta función, por ejemplo, desde un botón? – Mike

Cuestiones relacionadas