コード例 #1
0
        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;
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }