Anuncios

Confio

viernes, 18 de febrero de 2011

Llamadas a la línea de comandos usando C#


Con el ejemplo que les voy a pasar, pueden automatizar y miles de tareas con c# usando la línea de comandos cmd.
Como todos saben con el cmd, la línea de comandos de windows, se pueden crear usuarios, prender servicios, copiar archivos, borrar archivos, crear archivos, crear carpetas.

Lo que voy a hacer es mostarles cómo llamar a diferentes procesos usando C# en una aplicación de Windows Forms.

El ejemplo lo pueden bajar haciendo click en el siguiente link:

Download ejemplo. Luego  en la página del link haga click en el botón c# como indica la figura:


Este código realiza las siguientes actividades:

  • Abrir un programa con C# (en este caso, el Microsoft Paint Brush).
  • Abrir en internet explorer una página web (la página de Google).
  • Abrir un archivo existente (un archivo excel existente).
  • Crear un usuario de Windows usando C#.
Acá va el código:

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

namespace Shell
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process proc =
                new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            //Llamar a calculadora
            //proc.StartInfo.FileName = "calc";
            //Llamar a MS paintbrush
            //proc.StartInfo.FileName = "mspaint";
            //Llamar al manejador de servicios de Windows
            //proc.StartInfo.FileName = "services.msc";
            //Llamar al Event Viewer
              proc.StartInfo.FileName = "eventvwr.msc";


            proc.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "mspaint";
            proc.Start();

        }

        private void button3_Click(object sender, EventArgs e)
        {

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "iexplore";
            proc.StartInfo.Arguments = "http://www.google.com";           
            proc.Start();
            proc.WaitForExit();
            //Matar proceso
            //proc.Kill();

        }

        private void button4_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = @"c:\doc.xlsx";
            proc.Start();

        }

        private void button5_Click(object sender, EventArgs e)
        {
            crearusuario(textBox1.Text,textBox2.Text);

        }
           
        private void crearusuario(string usuario, string password)
        {
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "cmd";
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            proc.StandardInput.WriteLine(@"net user "+usuario+" "+password+" /add");
            proc.StandardInput.Flush();
            proc.StandardInput.Close();
            proc.Close();
        }

    }
}

El código es simple: 


           System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "mspaint";
            proc.Start();
En esta parte estoy llamando al Microsoft PaintBrush (mspaint).

          System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "iexplore";
            proc.StartInfo.Arguments = "http://www.google.com";           
            proc.Start();
            proc.WaitForExit();
En este sector estoy llamando al internet explorer (iexplore) y le digo que abra la página de Google.

          System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = @"c:\doc.xlsx";
            proc.Start();
Acá simplemente le digo que abra el archivo doc.xlsx que es un archivo Excel existente.

          System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "cmd";
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            proc.StandardInput.WriteLine(@"net user "+usuario+" "+password+" /add");
            proc.StandardInput.Flush();
            proc.StandardInput.Close();
            proc.Close();

Este trozo de código, esta usando el comando net user. Net user es la línea de comandos para crear usuarios locales dentro de mi sistema operativo. Usuario y password son mis variables.

De esta forma se puede crear código para miles de opciones. Espero que se entienda. Si desean crear usuarios de Active Directory, van a necesitar el comando dsadd user.

  • Para detener servicios se usa el comando net stop.
  • Para iniciar servicios se usa el comando net start
  • Para crear carpetas mkdir.
En fin, son miles de comandos que se pueden realizar mediante la línea de comandos cmd y con lo que les mostré, la pueden llamar desde C#.




Si tienen dudas, escriban a este blog. Gracias !!





People who read this post also read :