protected void OnProcessExited(object sender, ProcessExitedArgs e) { var handler = Exited; if (handler != null) { Trace.TraceInformation("The process for application {0} has exited unexpectedly", Identity); handler(this, new ApplicationExitedArgs { Message = e.Message, AppIdentity = Identity }); } }
// Called to start the launched process in a secondary thread private void Start() { try { // Attempt to launch the executable Logger.Log($"[Launcher] Launching: {process.StartInfo.FileName} {process.StartInfo.Arguments}"); process.Start(); // Begin reading from process's stdout/err process.BeginOutputReadLine(); process.BeginErrorReadLine(); // Wait for executable to exit Logger.Log("[Launcher] Process Started"); process.WaitForExit(); Running = false; // Prep exit event args ProcessExitedArgs exitArgs = new ProcessExitedArgs(); if (Error != null) { exitArgs.Errored = true; exitArgs.Error = Error; } // Emit exit event ProcessExited?.Invoke(this, exitArgs); } catch (Exception ex) { Running = false; Error = ex; Logger.Log($"[Launcher] Process failed to start: {ex.Message}"); // Prep exit event args ProcessExitedArgs exitArgs = new ProcessExitedArgs(); exitArgs.Errored = true; exitArgs.Error = Error; // Emit exit event ProcessExited?.Invoke(this, exitArgs); } }