Obtener procesos remotos con WMI y C#

Que tal compañeros, este primer artículo del blog lo orientaremos hacia el desarrollo en .NET y mas específicamente a C#. Talvez hayamos escuchado alguna vez sobre el WMI (Windows Management Instrumentation) que no es mas que una infraestructura de Microsoft que pretende establecer normas estándar para tener acceso y compartir la información de administración a través de la red a partir de Windows 2000.

En este ejemplo obtendremos los procesos en ejecución de un equipo en la red local, para esto primero debemos implementar las siguientes librerías con sus respectivas referencias:

using System.Management;

Lo siguiente que haremos será obtener el nombre de todos los procesos que se estén ejecutando en el equipo remoto y para eso utilizaremos el WQL de WMI. Para lograr dicha operación es necesario autenticarnos en el equipo remoto mediante el nombre del equipo, el usuario y la contraseña.

try
{
     //Nombre del equipo remoto al que nos conectaremos
     string remoteMachine = txtEquipoRemoto.Text;
     //Ruta de administración del equipo remoto
     ManagementPath path = new ManagementPath("\\\\" + remoteMachine + "\\root\\cimv2");
     ConnectionOptions conexion = new ConnectionOptions();;
     //Establecemos los parámetros para realizar la conexión
     conexion.Username = txtUsuario.Text;
     conexion.Password = txtPassword.Text;
     //Creamos la instancia para las operaciones de administración y le asignamos los parámetros establecidos anteriormente
     ManagementScope scope = new ManagementScope(path, conexion);
     //Declaramos la sentencia para obtener el nombre de los procesos
     ObjectQuery selectQuery = new ObjectQuery("Select Name from Win32_Process");
     //Instanciamos un buscador de objetos
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, selectQuery);

     //Usamos un foreach para la selección individual de cada uno de los procesos para añadirlos a un ListBox
     foreach (ManagementObject proceso in searcher.Get())
     {
         listboxEquipoRemoto.Items.Add(proceso["Name"].ToString());
     }
}
catch(Exception ex)
{
     MessageBox.Show(ex.Message);
}

Con esto debemos poder visualizar en nuestra aplicación todos los procesos en ejecución del equipo que hayamos elegido.

6 comentarios en “Obtener procesos remotos con WMI y C#

  1. Miguel Alanis Hernandez

    excelenteeee que buen blog, brut, y fani 🙂

  2. Octavio Herrera Hernández

    Hola Fannyeros!! saludos desde León Gto. vi su blog y fijense que es esactamente parecido a una practica que me dejaron en la escuela, quisiera saber como poder eliminar procesos desde un equipo remoto ya que los obtuve me urge!!! 😦 ojalá me pudieran contestar! es de vida o muerte.

    Saludos y felicitaiciones maestros de 5 estrellas

    • Octavio Herrera Hernández

      Hola, solo agradeciendoles por su respuesta, de verdad me han salvado la vida! sigan posteando para la comunidad!!! 😀 graciassss y nuevamente gracias!!!

      Saludos! ya les debo !

  3. Hola, me manda un mensaje de que El servidor RPC no está disponible. (Excepción de HRESULT: 0x800706BA), a que se puede deber?

    • Hola Javier, lo primero que debes revisar es que tengas iniciado el servicio «Llamada a procedimiento remoto (RPC)», si lo tienes iniciado reinícialo y vuelve a intentar.

      Esta excepción también se puede presentar cuando tienes algún tipo de firewall o antivirus en el equipo remoto, si es así desactívalo e intenta de nuevo la conexión. Si esto tampoco funciona debes revisar que el usuario con el que te estas intentando conectar sea un usuario con privilegios de administrador y de preferencia que sea el mismo usuario que creaste al instalar el sistema operativo en el equipo remoto.

      En ocasiones puede suceder que no se reconozca el nombre del equipo remoto, prueba directamente con la dirección IP de equipo al que intentas conectarte.

      Esperamos que esto te sirva y cualquier cosa estamos para ayudar.

Replica a Octavio Herrera Hernández Cancelar la respuesta