Claro que sí, el método te devuelve un System.Diagnostic.Process en el cual puedes utilizar el delegado exited para ejecutar otro código cuando se cierre la aplicación:
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;
namespace p2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private System.Diagnostics.Process proceso;
private void button1_Click(object sender, EventArgs e)
{
try
{
proceso= System.Diagnostics.Process.Start("carpeta/p01.exe");
proceso.Exited += new EventHandler(proceso_Exited);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void proceso_Exited(object sender, EventArgs e)
{
MessageBox.Show("Se ha cerrado el programa");
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show(proceso.HasExited.ToString());
}
}
}
el único inconveniente es que el evento no se lanza automáticamente sino hasta que hagas referencia a cualquier miembro de la instancia del Process, por lo que podrías crear un thread en donde llames a Process.HasExited para comprobar si se ha finalizado el proceso.