¿Cómo se ejecuta un script por lotes dentro de un formulario de interfaz gráfica de usuario en C#Cómo ejecutar un archivo por lotes dentro de una forma GUI C#
Podría alguien proporcionar una muestra por favor?
¿Cómo se ejecuta un script por lotes dentro de un formulario de interfaz gráfica de usuario en C#Cómo ejecutar un archivo por lotes dentro de una forma GUI C#
Podría alguien proporcionar una muestra por favor?
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
.
System.Diagnotics.Process.Start ("yourbatch.bat"); debería hacerlo
@Will A Hola, gracias por la pronta respuesta, aunque ¿cómo implementarla en un formulario? – Mike
@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? –
@Will A Sí, me gustaría que la salida se muestre dentro de la interfaz de usuario en el formulario – Mike
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.
¿cómo llamarías a esta función, por ejemplo, desde un botón? – Mike
@Kev Hola, gracias, ¿cómo se inicializaría esto en un cuadro de texto, por ejemplo? – Mike
@Mike - He actualizado mi respuesta, ¿es eso lo que quieres decir? – Kev
@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