Terminar proceso remotamente

Estos días estoy testeando una aplicación que en ocasiones se queda pillada y necesito detenerla desde el Administrador de tareas.

Como estaba en otro ordenador se me ocurrió hacer algún programa en C# que permita cerrar una aplicación remotamente.

En un post anterior os he compartido como iniciar un proceso o aplicación remotamente, ahora en este ejemplo veremos como cerrarla.

Claro que este forma de cerrar un programa es una mala practica, pero lo interesante es lo fácil que se puede hacer con C#. Solo necesitamos el nombre de la aplicacion, IP del ordenador remoto, usuario y contraseña.

El código es el siguiente:


string proceso = string.Empty;
ConnectionOptions loConnectionOptions = null;

proceso = "ccTalkTest.exe";
loConnectionOptions = new ConnectionOptions();
loConnectionOptions.Username = txtUser.Text;
loConnectionOptions.Password = txtPassword.Password;

ManagementScope scope = new ManagementScope(@"\\" + txtIP.Text + @"\root\cimv2", loConnectionOptions);

SelectQuery query = new SelectQuery("select * from Win32_process where name = '" + proceso + "'");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
    foreach (ManagementObject process in searcher.Get()) { process.InvokeMethod("Terminate", null); }
}

Ejecutar aplicación remotamente

Surgió la necesidad de iniciar una aplicación remotamente. Se trata de un ejecutable que quería iniciar desde otro ordenador. Son estas cosas que te gusta hacer para optimizar tú trabajo, en tareas repetitivas.

Entonces me puse a investigar, quería hacer algo simple, muy rápido, solo necesitaba indicar el IP, el usuario y contraseña del ordenador y desde luego el nombre del .exe.

Os comparto el código, para que lo utilicéis cuando lo necesitéis.

Process p = new Process();

p.StartInfo.FileName = @"PsExec.exe";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

p.StartInfo.Arguments = @"\\" + txtIP.Text + " -u " + txtUser.Text 
                        + " -p " + txtPassword.Password + " -i 0 -d "
                        + "\"" + @"C:\\Test\MeyApp.exe" + "\"";

p.Start();
var ended = p.WaitForExit(60 * 1000);

if (!ended)
{
    throw new Exception("No se ha podido iniciar el proceso.");
}

using (StreamReader sr = p.StandardOutput)
{
    string buffer = sr.ReadToEnd();
}