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; }
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); } }
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(); } } }
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); }
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(); } } }