¿Cómo ejecutar un archivo .bat desde una aplicación de formulario de Windows C#?
Lo que necesito hacer es que una aplicación GUI de C# 2005 llame a un .bat y varios archivos VBScript a petición del usuario. Esta es solo una solución provisional hasta el final de las vacaciones y puedo escribirlo todo en C#. Puedo ejecutar los archivos VBScript sin problemas, pero no puedo ejecutar el archivo .bat. Cuando hago "clic" en la aplicación C# para ejecutar el archivo .bat, se abre una ventana de DOS y se cierra muy rápido y el archivo .bat de prueba no se ejecuta: "Windows no reconoce bat como un comando interno o externo" es el error devuelto en el cuadro de DOS. Si simplemente hago doble clic en el archivo .bat o lo ejecuto manualmente desde el símbolo del sistema, se ejecuta. También necesito que el archivo .bat se ejecute silenciosamente a menos que se requiera la interacción del usuario: este script copia más de 11.000 archivos en carpetas en una máquina en red y, ocasionalmente, Windows "olvida" si el destino es un archivo o directorio y le pide al usuario que lo indique. qué es (este es un tema completamente diferente que no se discutirá aquí... no hace falta decir que me molesta).
Hasta ahora en mi fuente C# tengo esto:
Process scriptProc = new Process();
if (File.Exists("c:\\scripts\\batchfile1.bat"))
{
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
scriptProc.Start();
scriptProc.WaitForExit(1500000);
scriptProc.Close();
}
if (!File.Exists("c:\\scripts\\batchfile1.bat"))
{
}
Soy consciente de que este código no funciona, pero es esencialmente lo que quiero que haga. Lo que estoy viendo es algo como esto para archivos .bat. Supongo que tengo que decirle al sistema que use cmd para ejecutar el .bat. No sé cómo hacer esto. Revisé este sitio que es para C# 2003. No me resulta de mucha ayuda ya que estoy muy verde con C#.
EDITAR: Usando la publicación de Kevin, lo intenté nuevamente. El mismo script de solución de esa publicación, pero modificado para mí ya que no necesito redirigir:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();
Esto es lo que estás buscando:
El servicio cuelga en WaitForExit después de llamar al archivo por lotes
Se trata de una pregunta de por qué un servicio no puede ejecutar un archivo, pero muestra todo el código necesario para hacerlo.