Если вы знакомы с C #, вы можете попробовать использовать фоновый рабочий для мониторинга процесса и перезапустить его, когда у вас возникнут проблемы.
Например, что-то похожее у меня (для приложения с графическим интерфейсом) выглядит следующим образом
private void startServer() { if (this.CancellationPending == true) { Console.WriteLine("Termination of 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."); } } }