Se você estiver familiarizado com o C #, pode tentar usar um trabalhador em segundo plano para monitorar o processo e reiniciá-lo quando tiver problemas.
Por exemplo algo semelhante que eu tenho (para um aplicativo GUI) parece com o abaixo
private void startServer()
{
if (this.CancellationPending == true)
{
Console.WriteLine("Termination of {0} requested", thisServer.serverSettings.serverName);
this.ReportProgress(100);
this.Dispose(true);
}
else
{
try
{
thisServer.serverStatus = status.Starting;
using (Process p = Process.Start(thisServer.serverStartInfo))
{
thisServer.serverProc = p;
p.WaitForInputIdle(thisServer.serverSettings.startupDuration.Milliseconds);
thisServer.serverStatus = status.Running;
while (p.Responding)
{
// happy days
}
thisServer.serverStatus = status.Unknown;
try
{
p.Close();
thisServer.serverStatus = status.Offline;
}
catch
{
try
{
p.Kill();
thisServer.serverStatus = status.Offline;
}
catch { }
}
}
reRun();
}
catch
{
thisServer.serverStatus = status.Offline;
ReportProgress(100, "Error encountered when attempting to launch executable. Please review server settings.");
}
}
}