Skip to main content

Overview

BCU’s bulk uninstallation feature allows you to select and uninstall multiple applications at once, dramatically reducing the time needed to clean up your system. The intelligent task scheduler optimizes the uninstall order and manages concurrent operations for maximum efficiency.

Selecting Applications

Multi-Select

Select multiple applications using standard Windows selection methods (Ctrl+Click, Shift+Click)

Filter Selection

Use filters to quickly select groups of applications by criteria like publisher or install date

Orphaned Apps

Detect and select orphaned applications that lack proper uninstallers

Protected Items

System-protected applications are flagged and require confirmation before removal

Intelligent Task Sorting

BCU automatically sorts uninstall tasks for optimal performance and safety:
public static IEnumerable<T> SortIntelligently<T>(IEnumerable<T> entries, Func<T, BulkUninstallEntry> entryGetter)
{
    var query = from x in entries
                let item = entryGetter(x)
                orderby
                    // For safety always run simple deletes last so that actual uninstallers have a chance to run
                    item.UninstallerEntry.UninstallerKind == UninstallerType.SimpleDelete ascending,
                    // Always run loud first so later user can have some time to watch cat pics
                    item.IsSilentPossible ascending,
                    // Updates usually get uninstalled by their parent uninstallers
                    item.UninstallerEntry.IsUpdate ascending,
                    // SysCmps and Protected usually get uninstalled by their parent, user-visible uninstallers
                    item.UninstallerEntry.SystemComponent ascending,
                    item.UninstallerEntry.IsProtected ascending,
                    // Calculate number of digits and divide it by 4 to create buckets of sizes
                    Math.Round(Math.Floor(Math.Log10(item.UninstallerEntry.EstimatedSize.GetKbSize(true)) + 1) / 4) descending,
                    // Prioritize Msi uninstallers because they tend to take the longest
                    item.UninstallerEntry.UninstallerKind == UninstallerType.Msiexec descending
                select x;
    return query;
}

Sorting Priority

Simple delete operations are always scheduled last to ensure proper uninstallers run first, preventing issues where files are deleted before the uninstaller can clean up properly.
Interactive (“loud”) uninstallers run first so you can handle them while silent uninstallers process in the background.
Updates are processed before their parent applications since they’re typically removed by the main uninstaller.
System components and protected apps are deprioritized as they’re often dependencies of user applications.
Larger applications and MSI installers are prioritized since they typically take longer to uninstall.

Concurrent Operations

BCU can run multiple uninstallers simultaneously to speed up the process:
var status = UninstallManager.CreateBulkUninstallTask(taskEntries, GetConfiguration(quiet));
status.OneLoudLimit = _settings.UninstallConcurrentOneLoud;
status.ConcurrentUninstallerCount = _settings.UninstallConcurrency
    ? _settings.UninstallConcurrentMaxCount
    : 1;
status.Start();
ConcurrentUninstallerCount: Maximum number of simultaneous uninstall operationsOneLoudLimit: Maximum number of interactive (non-silent) uninstallers that can run at once

Protection System

BCU protects critical system applications from accidental removal. Protected items require explicit confirmation.
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);
}

Protected Categories

  • Windows Store Apps: System-level Windows Store applications
  • System Components: Applications marked with SystemComponent=1 in registry
  • Web Browsers: Installed web browsers to prevent accidental removal
  • BCU Itself: Bulk Crap Uninstaller prevents self-removal during batch operations

Process Management

Running Process Detection

BCU automatically detects processes related to applications being uninstalled and prompts you to close them

Child Process Tracking

Monitors spawned child processes to ensure uninstallers complete all cleanup tasks

Automatic Termination

Stuck processes can be automatically killed after detecting prolonged inactivity

System Restore Points

Optional system restore point creation before bulk operations begin

Batch Operation Workflow

  1. Selection: Choose applications to uninstall
  2. Validation: BCU checks for protected items and running processes
  3. Sorting: Tasks are intelligently ordered for optimal execution
  4. System Restore: Optional restore point creation
  5. Pre-Commands: Run custom commands before uninstall (if configured)
  6. Execution: Uninstallers run with automatic monitoring
  7. Junk Cleanup: Scan for and remove leftover files and registry entries
  8. Post-Commands: Run custom commands after uninstall (if configured)
Performance Tip: Enable concurrent uninstallation in settings for significantly faster bulk operations. Most systems can handle 3-5 concurrent uninstallers safely.

Advanced Features

Uninstall from Directory

Detect and uninstall applications directly from their installation folders:
public void UninstallFromDirectory(IEnumerable<ApplicationUninstallerEntry> allUninstallers)
{
    var result = MessageBoxes.SelectFolder(Localisable.UninstallFromDirectory_FolderBrowse);
    if (result == null) return;

    var items = new List<ApplicationUninstallerEntry>();
    LoadingDialog.ShowDialog(MessageBoxes.DefaultOwner, 
        Localisable.UninstallFromDirectory_ScanningTitle,
        _ => items.AddRange(DirectoryFactory.TryCreateFromDirectory(
            new DirectoryInfo(result), Array.Empty<string>())));
}

Retry on Failure

Failed uninstalls can automatically retry with different parameters:
  • First attempt uses quiet/silent mode if available
  • Second attempt uses interactive mode on failure
  • Retry behavior is configurable in settings

Quiet Mode

Learn about silent and unattended uninstallation

Junk Cleanup

Automatic leftover detection after uninstall

Build docs developers (and LLMs) love