Ejecutar comandos en el CMD de Windows desde C#


El ejecutar un proceso desde .NET no es muy complicado (no solo la consola) gracias a que se tienen las clases de “System.Diagnostics” y en particular la clase “Process”, que permite realizar llamadas a Procesos externos.
Para este ejemplo voy a crear una aplicación muy simple llamada CMD Executer que su única función es ejecutar comandos CMD.
Primero vamos a crear una clase estática llamada “ExecuteCommand” que recibe como parámetro un comando como cadena de texto:
        static void ExecuteCommand(string _Command)
        {
            //Indicamos que deseamos inicializar el proceso cmd.exe junto a un comando de arranque. 
            //(/C, le indicamos al proceso cmd que deseamos que cuando termine la tarea asignada se cierre el proceso).
            //Para mas informacion consulte la ayuda de la consola con cmd.exe /? 
            System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd""/c " + _Command);
            // Indicamos que la salida del proceso se redireccione en un Stream
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            //Indica que el proceso no despliegue una pantalla negra (El proceso se ejecuta en background)
            procStartInfo.CreateNoWindow = false;
            //Inicializa el proceso
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            proc.Start();
            //Consigue la salida de la Consola(Stream) y devuelve una cadena de texto
            string result = proc.StandardOutput.ReadToEnd();
            //Muestra en pantalla la salida del Comando
            Console.WriteLine(result);
        }

Nuestro siguiente paso, para que parezca una consola verdadera es crear un ciclo while infinito, que se detenga cuando ingresemos el comando “Salir”:
        static void Main(string[] args)
        {
            string command = "dir";
            Console.WriteLine("CMD Executer V.0.1");
            Console.WriteLine("Last Release 05 - Febraury - 2012");
 
            while (true)
            {
                Console.Write("#:");
                command = Console.ReadLine();
                if (command == "Salir" || command == "salir")
                {
                    break;
                }
                ExecuteCommand(command);
            }
        }
Ahora cuando hagamos correr nuestro programa tendremos lo siguiente:
 Suerte!

Comentarios

  1. Muchas gracias! Realmente me fue de ayuda.

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Magnifico post, realmente me sacaste de un aprieto! me gustaría saber si hay alguna forma de que no sea visible la ventana de cmd, al momento de ejecutar la función? Muchas Gracias.!

    ResponderEliminar
    Respuestas
    1. Hola, en el código de más arriba a aparece en False, pero debes cambiarlo a True

      procStartInfo.CreateNoWindow = true;

      Eliminar
  4. En las propiedades del processInfo establece esto:

    WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

    Con esto no se muestra la ventana de la aplicación que ejecutes.

    ResponderEliminar
  5. cuando ejecuto el proyecto funciona bien , pero si solo ejecuto el .exe no funciona.

    ResponderEliminar
  6. Muchas gracias. Me ha servido de mucho :)

    ResponderEliminar
  7. Hola muy buen aporte, ahora necesito una mano sobre eso, yo ejecuto un archivo .bat desde c#.. el cual me ejecuta un comando de una aplicación (gpg para encriptación) el mismo al ejecutar me pide ingreso de texto (contraseña de encriptación) con una ventana emergente... si o si necesitaría poder escribir en esa ventana emergente sin que se interactue con el usuario, es decir que lo haga todo por codigo... Aclaro de antemano encontré una solución
    que es enviarlo junto con el comando en el .bat lo que quiero escribir de la siguiente manera a modo de ejemplo :
    echo "contraseña" | gpg -o archivosalida.txt archivoAdesencriptar.gpg

    al ejecutar por primera vez la parte 'echo "contraseña" ' no me toma, me lanza dicha ventana emergente de la aplicación, pero al realizarlo por segunda vez si funciona... quisera saber como evitar ese ingreso por primera vez... sería esa la cuestion..

    Muchas gracias desde ya
    Saludos

    ResponderEliminar
  8. ¿Esto Funciona para WEB FORM?

    ResponderEliminar
  9. wow!! muchas gracias me sirvió al cien uwu

    ResponderEliminar
  10. hola, necesito ejecutar el simbolo del sistemas con una tarea programada.
    gracias.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Conectarse a un Web Service en PHP con WPF

Usar Log4Net en un proyecto ASP.NET MVC