private void AskForAutomaticApplicationTermination(ApplicationTerminationEventArgs args) { var nl = Environment.NewLine; var applicationList = string.Join(Environment.NewLine, args.RunningApplications.Select(a => a.Name)); var warning = text.Get(TextKey.MessageBox_ApplicationAutoTerminationDataLossWarning); var message = $"{text.Get(TextKey.MessageBox_ApplicationAutoTerminationQuestion)}{nl}{nl}{warning}{nl}{nl}{applicationList}"; var title = text.Get(TextKey.MessageBox_ApplicationAutoTerminationQuestionTitle); var result = messageBox.Show(message, title, MessageBoxAction.YesNo, MessageBoxIcon.Question, parent: splashScreen); args.TerminateProcesses = result == MessageBoxResult.Yes; }
public void Operations_MustAbortAskingForAutomaticApplicationTermination() { var args = new ApplicationTerminationEventArgs(Enumerable.Empty <RunningApplication>()); messageBox.Setup(m => m.Show( It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MessageBoxAction>(), It.IsAny <MessageBoxIcon>(), It.IsAny <IWindow>())).Returns(MessageBoxResult.No); sut.TryStart(); operationSequence.Raise(s => s.ActionRequired += null, args); Assert.IsFalse(args.TerminateProcesses); }
private OperationResult TryTerminate(IEnumerable <RunningApplication> runningApplications) { var args = new ApplicationTerminationEventArgs(runningApplications); var failed = new List <RunningApplication>(); var result = OperationResult.Success; logger.Info($"The following applications need to be terminated: {string.Join(", ", runningApplications.Select(a => a.Name))}."); ActionRequired?.Invoke(args); if (args.TerminateProcesses) { logger.Info($"The user chose to automatically terminate all running applications."); foreach (var application in runningApplications) { var success = monitor.TryTerminate(application); if (success) { logger.Info($"Successfully terminated application '{application.Name}'."); } else { result = OperationResult.Failed; failed.Add(application); logger.Error($"Failed to automatically terminate application '{application.Name}'!"); } } } else { logger.Info("The user chose not to automatically terminate all running applications. Aborting..."); result = OperationResult.Aborted; } if (failed.Any()) { ActionRequired?.Invoke(new ApplicationTerminationFailedEventArgs(failed)); } return(result); }