/// <summary>
        ///     Begins scanning for errors in the registry
        /// </summary>
        private void StartScanning()
        {
            // Set scan start time
            _dateTimeStart = DateTime.Now;

            // Create log file + Write Header
            Wizard.CreateNewLogFile();

            // Begin Critical Region
            Thread.BeginCriticalRegion();

            try
            {
                Wizard.Report.WriteLine("Started scan at " + DateTime.Now);
                Wizard.Report.WriteLine();

                // Begin Scanning
                foreach (var scanner in EnabledScanners)
                {
                    InvokeCurrentSection(scanner.ScannerName);

                    Wizard.Report.WriteLine("Starting scanning: " + scanner.ScannerName);

                    StartScanner(scanner);

                    if (_cancellationTokenSource.IsCancellationRequested)
                    {
                        _cancellationTokenSource.Token.ThrowIfCancellationRequested();
                    }

                    Wizard.Report.WriteLine("Finished scanning: " + scanner.ScannerName);
                    Wizard.Report.WriteLine();
                }
            }
            catch (OperationCanceledException)
            {
                // Scanning was aborted
                Wizard.Report.Write("User aborted scan... ");

                Wizard.Report.WriteLine("Exiting.\r\n");
            }
            finally
            {
                // Compute time between start and end of scan
                var ts = DateTime.Now.Subtract(_dateTimeStart);

                // Report to Little Software Stats
                Main.Watcher.EventPeriod("Registry Cleaner", "Scan", (int)ts.TotalSeconds, true);

                // Set last scan elapsed time (in ticks)
                Settings.Default.lastScanElapsed = ts.Ticks;

                // Increase total number of scans
                Settings.Default.totalScans++;

                // Stop timer
                _timerUpdate.Stop();

                // Write scan stats to log file
                Wizard.Report.WriteLine("Total time elapsed: {0} minutes {1} seconds", ts.Minutes, ts.Seconds);
                Wizard.Report.WriteLine("Total problems found: {0}", TotalProblems);
                Wizard.Report.WriteLine("Total objects scanned: {0}", TotalItemsScanned);
                Wizard.Report.WriteLine();
                Wizard.Report.WriteLine("Finished scan at " + DateTime.Now);

                // End Critical Region
                Thread.EndCriticalRegion();

                // Reset taskbar progress bar
                Dispatcher.BeginInvoke(new Action(() => Main.TaskbarProgressState = TaskbarItemProgressState.None));

                if (!_cancellationTokenSource.IsCancellationRequested)
                {
                    _scanBase.MoveNext();
                }

                _cancellationTokenSource.Dispose();
                _cancellationTokenSource = null;
            }
        }