viernes, 26 de diciembre de 2014

C# - Como ejecutar lineas de comando y obtener la respuesta (sin abrir la ventana "cmd")




¡Hola de nuevo!
Quiero compartirles este código para ejecutar comandos y recibir la respuesta sin abrir la ventada "cmd" de Windows.

Estos son los pasos:
1) Crear un proyecto de C# en Visual Studio y agregar un textBox, un botón y un listBox al Form
2) Adaptar el siguiente código a tu proyecto:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SandBox
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if(textBox1.TextLength>0)
                executeCommand(textBox1.Text);
        }
        private void executeCommand(String commandR)
        {
            try
            {
                var proc = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = "cmd.exe",
                        Arguments = "/c " + commandR,
                        UseShellExecute = false,
                        RedirectStandardOutput = true,
                        CreateNoWindow = true
                    }
                };
                updateStatusExecution("***COMMAND RECEIVED: " + commandR);
                updateStatusExecution("***ANSWER:");
                proc.Start();
                while (!proc.StandardOutput.EndOfStream)
                {
                    string line = proc.StandardOutput.ReadLine();
                    updateStatusExecution(line);
                }
            }
            catch (Exception e)
            {
                updateStatusExecution("***Error while executing '" + commandR + "'");
                updateStatusExecution("***Exception: '" + e.ToString());
                updateStatusExecution("***Stack Trace: '" + e.StackTrace.ToString());
            }
        }
        private void updateStatusExecution(String textR)
        {
            String currentDateTime = DateTime.Now.ToString(); ;
            listBox1.Items.Add(currentDateTime + " - " + textR);
        }
    }
}


3) Presionar "Start" (F5) y escribir un comando en el textBox para probar.




Aquí está una captura de pantalla de mi código funcionando:



Espero hayan tenido una maravillosa Navidad y les deseo lo mejor para el 2015.
¡Saludos!





án.

5 comentarios: