Project Structure
Bulk Crap Uninstaller is built with a modular architecture that separates concerns into distinct projects. The codebase follows a clear separation between user interfaces, core logic, and specialized helper applications.Core Components
The solution is organized into several key areas:User Interfaces
BulkCrapUninstaller - Main GUI application built with WinFormsBCU-console - Command-line interface for scripting and automationBCU-launcher - Native C++ launcher executable
Core Libraries
UninstallTools - Core uninstallation logic and application detectionKlocTools - Shared utility functions and helpersObjectListView - Enhanced list view control for the UI
Helper Applications
SteamHelper - Steam application integrationWinUpdateHelper - Windows Update component detectionStoreAppHelper - Windows Store app managementOculusHelper - Oculus VR application supportScriptHelper - Script execution support
Supporting Libraries
UninstallerAutomatizer - Automated uninstaller interactionUniversalUninstaller - Generic uninstaller handlingPortableSettingsProvider - Portable configuration managementSimpleTreeMap - Tree map visualization componentNetSettingBinder - Settings binding frameworkNBug - Custom error reporting implementation
Architecture Pattern
BCUninstaller uses a layered architecture where:- UI Layer - The WinForms interface and console app handle user interaction
- Business Logic Layer - UninstallTools contains all core uninstallation logic
- Helper Layer - Specialized helper applications handle platform-specific integrations
- Utility Layer - Shared libraries provide common functionality
Helper Application Pattern
The helper applications are designed as separate executables that:- Communicate via command-line interface (CLI)
- Can be used independently in batch scripts
- Decouple highly specialized code from the main application
- Adapt different application types into a common format
UninstallTools: The Core Engine
UninstallTools is where most of the magic happens. This library handles:- Application detection from multiple sources (registry, file system, etc.)
- Uninstaller validation and execution
- Leftover file and registry entry detection
- Integration with various uninstaller systems (NSIS, InnoSetup, Msiexec)
- Windows Store app enumeration
- Steam library parsing
Simplified Class Diagram
The UninstallTools library follows an object-oriented design centered around theApplicationUninstallerEntry class, which represents a single detected application. The class diagram shows the relationships between core components:
Key classes include:
- ApplicationUninstallerEntry - Represents an installed application with all its metadata
- UninstallerManager - Orchestrates the discovery and management of uninstallers
- JunkScanner - Detects leftover files and registry entries after uninstallation
- UninstallTaskRunner - Executes uninstall operations with progress tracking
Supported Uninstaller Systems
BCUninstaller has specialized support for detecting and handling:- NSIS (Nullsoft Scriptable Install System)
- InnoSetup
- Windows Installer (MSI)
- Windows Store Apps
- Steam Games
- Windows Features
- Oculus VR Applications
- Generic quiet uninstallers
Platform Support
.NET Version
Built with .NET 8 for modern Windows platformsSupports multiple architectures: x86, x64, ARM64, AnyCPU
Build Configurations
Debug and Release configurationsMultiple platform targets for broad compatibility
Project Dependencies
The main BCUninstaller application depends on:- UninstallTools (core logic)
- KlocTools (utilities)
- All helper applications
- UI component libraries (ObjectListView, SimpleTreeMap)
- Configuration libraries (PortableSettingsProvider, NetSettingBinder)
Extension Points
The architecture provides several extension points for adding new functionality:- Custom uninstaller detection - Add new detection methods in UninstallTools
- New helper applications - Create CLI tools following the existing helper pattern
- Additional junk scanners - Extend leftover detection capabilities
- UI customizations - Modify the WinForms interface or add new views
Related Resources
Building from Source
Learn how to compile BCUninstaller
Contributing
Guidelines for contributing code
