Example #1
0
        private void uninstallButton_Click(object sender, EventArgs e)
        {
            String message = LanguageUtil.GetCurrentLanguageString("SureUninstall", Name, internalCulture);

            if (WindowManager.ShowQuestionBox(this, message, internalCulture) == DialogResult.No)
            {
                return;
            }

            introPanel.Visible      = false;
            updatePanel.Visible     = true;
            uninstallButton.Visible = false;
            cancelButton.Enabled    = false;
            cancelButton.Text       = LanguageUtil.GetCurrentLanguageString("CloseButton", Name, internalCulture);

            UninstallManager.UninstallProcedure(this, internalCulture);

            cancelButton.Enabled = true;
        }
Example #2
0
        public void AddMissingInformation(ApplicationUninstallerEntry target)
        {
            if (target.UninstallerKind != UninstallerType.Msiexec)
            {
                return;
            }

            if (string.IsNullOrEmpty(target.UninstallString))
            {
                target.UninstallString = UninstallManager.GetMsiString(target.BundleProviderKey,
                                                                       MsiUninstallModes.Uninstall);
            }

            if (string.IsNullOrEmpty(target.QuietUninstallString))
            {
                target.QuietUninstallString = UninstallManager.GetMsiString(target.BundleProviderKey,
                                                                            MsiUninstallModes.QuietUninstall);
            }
        }
Example #3
0
        public void RunUninstall(IEnumerable <ApplicationUninstallerEntry> selectedUninstallers,
                                 IEnumerable <ApplicationUninstallerEntry> allUninstallers, bool quiet)
        {
            if (!TryGetUninstallLock())
            {
                return;
            }
            var listRefreshNeeded = false;

            try
            {
                var targets = new List <ApplicationUninstallerEntry>(selectedUninstallers);

                if (!_settings.AdvancedDisableProtection)
                {
                    var protectedTargets = targets.Where(x => x.IsProtected).ToList();
                    if (
                        MessageBoxes.ProtectedItemsWarningQuestion(protectedTargets.Select(x => x.DisplayName).ToArray()) ==
                        MessageBoxes.PressedButton.Cancel)
                    {
                        return;
                    }

                    targets.RemoveAll(protectedTargets);
                }

                if (targets.Any())
                {
                    _lockApplication(true);

                    var taskEntries = ConvertToTaskEntries(quiet, targets);

                    taskEntries = _settings.AdvancedIntelligentUninstallerSorting
                        ? SortIntelligently(taskEntries).ToList()
                        : taskEntries.OrderBy(x => x.UninstallerEntry.DisplayName).ToList();

                    taskEntries = UninstallConfirmationWindow.ShowConfirmationDialog(MessageBoxes.DefaultOwner, taskEntries);

                    if (taskEntries == null || taskEntries.Count == 0)
                    {
                        return;
                    }

                    if (!SystemRestore.BeginSysRestore(targets.Count))
                    {
                        return;
                    }

                    if (!CheckForRunningProcessesBeforeUninstall(taskEntries.Select(x => x.UninstallerEntry), !quiet))
                    {
                        return;
                    }

                    // No turning back at this point (kind of)
                    listRefreshNeeded = true;

                    _visibleCallback(false);

                    if (_settings.ExternalEnable && _settings.ExternalPreCommands.IsNotEmpty())
                    {
                        LoadingDialog.ShowDialog(MessageBoxes.DefaultOwner, Localisable.LoadingDialogTitlePreUninstallCommands,
                                                 controller => { RunExternalCommands(_settings.ExternalPreCommands, controller); });
                    }

                    var status = UninstallManager.CreateBulkUninstallTask(taskEntries, GetConfiguration(quiet));
                    status.OneLoudLimit = _settings.UninstallConcurrentOneLoud;
                    status.ConcurrentUninstallerCount = _settings.UninstallConcurrency
                        ? _settings.UninstallConcurrentMaxCount
                        : 1;
                    status.Start();

                    UninstallProgressWindow.ShowUninstallDialog(status, entries => SearchForAndRemoveJunk(entries, allUninstallers));

                    var junkRemoveTargetsQuery = from bulkUninstallEntry in status.AllUninstallersList
                                                 where bulkUninstallEntry.CurrentStatus == UninstallStatus.Completed ||
                                                 bulkUninstallEntry.CurrentStatus == UninstallStatus.Invalid ||
                                                 (bulkUninstallEntry.CurrentStatus == UninstallStatus.Skipped &&
                                                  !bulkUninstallEntry.UninstallerEntry.RegKeyStillExists())
                                                 select bulkUninstallEntry.UninstallerEntry;

                    if (MessageBoxes.LookForJunkQuestion())
                    {
                        SearchForAndRemoveJunk(junkRemoveTargetsQuery, allUninstallers);
                    }

                    if (_settings.ExternalEnable && _settings.ExternalPostCommands.IsNotEmpty())
                    {
                        LoadingDialog.ShowDialog(MessageBoxes.DefaultOwner, Localisable.LoadingDialogTitlePostUninstallCommands,
                                                 controller => { RunExternalCommands(_settings.ExternalPostCommands, controller); });
                    }

                    SystemRestore.EndSysRestore();
                }
                else
                {
                    MessageBoxes.NoUninstallersSelectedInfo();
                }
            }
            finally
            {
                ReleaseUninstallLock();
                _lockApplication(false);
                _visibleCallback(true);
                if (listRefreshNeeded)
                {
                    _initiateListRefresh();
                }
            }
        }
Example #4
0
        private static int RunUninstall(UninstallList list, bool isQuiet, bool isUnattended, bool isVerbose)
        {
            Console.WriteLine("Starting bulk uninstall...");
            var apps = QueryApps(isQuiet, isUnattended, isVerbose);

            apps = apps.Where(a => list.TestEntry(a) == true).OrderBy(x => x.DisplayName).ToList();

            if (apps.Count == 0)
            {
                Console.WriteLine("No applications matched the supplied uninstall list.");
                return(0);
            }

            Console.WriteLine("{0} application(s) were matched by the list: {1}", apps.Count,
                              string.Join("; ", apps.Select(x => x.DisplayName)));

            Console.WriteLine("These applications will now be uninstalled PERMANENTLY.");

            if (!isUnattended)
            {
                Console.WriteLine("Do you want to continue? [Y]es/[N]o");
                if (Console.ReadKey(true).Key != ConsoleKey.Y)
                {
                    return(CancelledByUser());
                }
            }

            Console.WriteLine("Setting-up for the uninstall task...");
            var targets = apps.Select(a => new BulkUninstallEntry(a, a.QuietUninstallPossible, UninstallStatus.Waiting))
                          .ToList();
            var task = UninstallManager.CreateBulkUninstallTask(targets,
                                                                new BulkUninstallConfiguration(false, isQuiet, false, true, true));
            var isDone = false;

            task.OnStatusChanged += (sender, args) =>
            {
                ClearCurrentConsoleLine();

                var running  = task.AllUninstallersList.Count(x => x.IsRunning);
                var waiting  = task.AllUninstallersList.Count(x => x.CurrentStatus == UninstallStatus.Waiting);
                var finished = task.AllUninstallersList.Count(x => x.Finished);
                var errors   = task.AllUninstallersList.Count(x => x.CurrentStatus == UninstallStatus.Failed ||
                                                              x.CurrentStatus == UninstallStatus.Invalid);
                Console.Write("Running: {0}, Waiting: {1}, Finished: {2}, Failed: {3}",
                              running, waiting, finished, errors);

                if (task.Finished)
                {
                    isDone = true;
                    Console.WriteLine();
                    Console.WriteLine("Uninstall task Finished.");

                    foreach (var error in task.AllUninstallersList.Where(x =>
                                                                         x.CurrentStatus != UninstallStatus.Completed && x.CurrentError != null))
                    {
                        Console.WriteLine("Error: {0} - {1}", error.UninstallerEntry.DisplayName,
                                          error.CurrentError.Message);
                    }
                }
            };
            task.Start();

            while (!isDone)
            {
                Thread.Sleep(250);
            }

            return(0);
        }
Example #5
0
        public void RunUninstall(IEnumerable <ApplicationUninstallerEntry> selectedUninstallers,
                                 IEnumerable <ApplicationUninstallerEntry> allUninstallers, bool quiet)
        {
            if (!TryGetUninstallLock())
            {
                return;
            }
            var listRefreshNeeded = false;

            try
            {
                var targetList         = new List <ApplicationUninstallerEntry>(selectedUninstallers);
                var allUninstallerList = allUninstallers as IList <ApplicationUninstallerEntry> ?? allUninstallers.ToList();

                if (!_settings.AdvancedDisableProtection)
                {
                    var protectedTargets = targetList.Where(x => x.IsProtected).ToList();
                    if (
                        MessageBoxes.ProtectedItemsWarningQuestion(protectedTargets.Select(x => x.DisplayName).ToArray()) ==
                        MessageBoxes.PressedButton.Cancel)
                    {
                        return;
                    }

                    targetList.RemoveAll(protectedTargets);
                }

                if (targetList.Any())
                {
                    _lockApplication(true);

                    BulkUninstallEntry[] taskEntries;

                    using (var wizard = new BeginUninstallTaskWizard())
                    {
                        wizard.Initialize(targetList, allUninstallerList.ToList(), quiet);

                        wizard.StartPosition = FormStartPosition.CenterParent;
                        if (wizard.ShowDialog(MessageBoxes.DefaultOwner) != DialogResult.OK)
                        {
                            return;
                        }

                        taskEntries = wizard.Results;
                    }

                    _visibleCallback(false);

                    // No turning back at this point (kind of)
                    listRefreshNeeded = true;

                    if (_settings.ExternalEnable && _settings.ExternalPreCommands.IsNotEmpty())
                    {
                        LoadingDialog.ShowDialog(MessageBoxes.DefaultOwner, Localisable.LoadingDialogTitlePreUninstallCommands,
                                                 controller => { RunExternalCommands(_settings.ExternalPreCommands, controller); });
                    }

                    var status = UninstallManager.CreateBulkUninstallTask(taskEntries, GetConfiguration(quiet));
                    status.OneLoudLimit = _settings.UninstallConcurrentOneLoud;
                    status.ConcurrentUninstallerCount = _settings.UninstallConcurrency
                        ? _settings.UninstallConcurrentMaxCount
                        : 1;
                    status.Start();

                    UninstallProgressWindow.ShowUninstallDialog(status, entries => SearchForAndRemoveJunk(entries, allUninstallerList));

                    var junkRemoveTargetsQuery = from bulkUninstallEntry in status.AllUninstallersList
                                                 where bulkUninstallEntry.CurrentStatus == UninstallStatus.Completed ||
                                                 bulkUninstallEntry.CurrentStatus == UninstallStatus.Invalid ||
                                                 (bulkUninstallEntry.CurrentStatus == UninstallStatus.Skipped &&
                                                  !bulkUninstallEntry.UninstallerEntry.RegKeyStillExists())
                                                 select bulkUninstallEntry.UninstallerEntry;

                    if (MessageBoxes.LookForJunkQuestion())
                    {
                        SearchForAndRemoveJunk(junkRemoveTargetsQuery, allUninstallerList);
                    }

                    if (_settings.ExternalEnable && _settings.ExternalPostCommands.IsNotEmpty())
                    {
                        LoadingDialog.ShowDialog(MessageBoxes.DefaultOwner, Localisable.LoadingDialogTitlePostUninstallCommands,
                                                 controller => { RunExternalCommands(_settings.ExternalPostCommands, controller); });
                    }

                    SystemRestore.EndSysRestore();
                }
                else
                {
                    MessageBoxes.NoUninstallersSelectedInfo();
                }
            }
            finally
            {
                ReleaseUninstallLock();
                _lockApplication(false);
                _visibleCallback(true);
                if (listRefreshNeeded)
                {
                    _initiateListRefresh();
                }
            }
        }
        public void RunUninstall(IEnumerable <ApplicationUninstallerEntry> selectedUninstallers,
                                 IEnumerable <ApplicationUninstallerEntry> allUninstallers, bool quiet)
        {
            if (!TryGetUninstallLock())
            {
                return;
            }
            var listRefreshNeeded = false;

            try
            {
                var targets = new List <ApplicationUninstallerEntry>(selectedUninstallers);

                if (!_settings.AdvancedDisableProtection)
                {
                    var protectedTargets = targets.Where(x => x.IsProtected).ToList();
                    if (
                        MessageBoxes.ProtectedItemsWarningQuestion(protectedTargets.Select(x => x.DisplayName).ToArray()) ==
                        MessageBoxes.PressedButton.Cancel)
                    {
                        return;
                    }

                    targets.RemoveAll(protectedTargets);
                }

                if (targets.Any())
                {
                    _lockApplication(true);

                    // Steam will be required to run loud steam app uninstalls
                    if (!CheckForRunningProcessesBeforeUninstall(targets, !quiet))
                    {
                        return;
                    }

                    if (!SystemRestore.BeginSysRestore(targets.Count))
                    {
                        return;
                    }

                    // No turning back at this point (kind of)
                    listRefreshNeeded = true;

                    if (_settings.ExternalEnable && _settings.ExternalPreCommands.IsNotEmpty())
                    {
                        LoadingDialog.ShowDialog(MessageBoxes.DefaultOwner, Localisable.LoadingDialogTitlePreUninstallCommands,
                                                 controller => { RunExternalCommands(_settings.ExternalPreCommands, controller); });
                    }

                    var status = UninstallManager.RunBulkUninstall(targets, GetConfiguration(quiet));
                    status.OneLoudLimit = _settings.UninstallConcurrentOneLoud;
                    status.ConcurrentUninstallerCount = _settings.UninstallConcurrency
                        ? _settings.UninstallConcurrentMaxCount
                        : 1;
                    status.Start();

                    using (var uninstallWindow = new UninstallProgressWindow())
                    {
                        uninstallWindow.Shown += (sender, args) => ((UninstallProgressWindow)sender).SetTargetStatus(status);
                        uninstallWindow.ShowDialog(MessageBoxes.DefaultOwner);
                    }

                    var junkRemoveTargetsQuery = from bulkUninstallEntry in status.AllUninstallersList
                                                 where bulkUninstallEntry.CurrentStatus == UninstallStatus.Completed ||
                                                 bulkUninstallEntry.CurrentStatus == UninstallStatus.Invalid ||
                                                 (bulkUninstallEntry.CurrentStatus == UninstallStatus.Skipped &&
                                                  !bulkUninstallEntry.UninstallerEntry.RegKeyStillExists())
                                                 select bulkUninstallEntry.UninstallerEntry;

                    if (MessageBoxes.LookForJunkQuestion())
                    {
                        SearchForAndRemoveJunk(junkRemoveTargetsQuery, allUninstallers);
                    }

                    if (_settings.ExternalEnable && _settings.ExternalPostCommands.IsNotEmpty())
                    {
                        LoadingDialog.ShowDialog(MessageBoxes.DefaultOwner, Localisable.LoadingDialogTitlePostUninstallCommands,
                                                 controller => { RunExternalCommands(_settings.ExternalPostCommands, controller); });
                    }

                    SystemRestore.EndSysRestore();
                }
                else
                {
                    MessageBoxes.NoUninstallersSelectedInfo();
                }
            }
            finally
            {
                ReleaseUninstallLock();
                _lockApplication(false);
                if (listRefreshNeeded)
                {
                    _initiateListRefresh();
                }
            }
        }