BCUninstaller/Bulk-Crap-Uninstaller · warning · InvalidOperationException

This application does not have a valid uninstaller

Error message

This application does not have a valid uninstaller

What it means

ExtractFileInfo is asked to build the file-info table for an entry whose UninstallerFullFilename is null or empty. The file-info tab needs a real uninstaller executable to inspect with AdvancedFileInfo, so an entry lacking one cannot be displayed. The message comes from the localised resource PropertiesWindow_Table_ErrorMissingUninstaller.

Source

Thrown at source/BulkCrapUninstaller/Functions/AppPropertiesGatherer.cs:117

            if (cert == null)
                return GetError(Localisable.PropertiesWindow_Table_ErrorNoCertificate);

            var localizedCert = new LocalizedX509Certificate2(cert);

            // Extract required data
            var lq = from property in typeof(LocalizedX509Certificate2).GetProperties()
                     select new SingleProperty(property.GetLocalisedName(), property.GetValue(localizedCert, new object[] { }));

            // Create and return the table
            var dt = GetCleanDataTable();
            ConvertPropertiesIntoDataTable(lq.ToList(), dt);
            return dt;
        }

        private static DataTable ExtractFileInfo(ApplicationUninstallerEntry tag)
        {
            if (string.IsNullOrEmpty(tag.UninstallerFullFilename))
                throw new InvalidOperationException(Localisable.PropertiesWindow_Table_ErrorMissingUninstaller);

            if (!File.Exists(tag.UninstallerFullFilename))
            {
                if (tag.UninstallerKind == UninstallerType.Msiexec)
                    throw new NotSupportedException(Localisable.PropertiesWindow_Table_ErrorMsi);
                throw new IOException(Localisable.PropertiesWindow_Table_ErrorDoesntExist);
            }
            
            var fi = AdvancedFileInfo.FromPath(tag.UninstallerFullFilename);
            
            var lq = from property in typeof(AdvancedFileInfo).GetProperties()
                     select new SingleProperty(property.GetLocalisedName(), property.GetValue(fi, new object[] { }));

            // Create and return the table
            var dt = GetCleanDataTable();
            ConvertPropertiesIntoDataTable(lq, dt);
            return dt;
        }

View on GitHub (pinned to 608321de98)

Solutions

  1. Use the Overview tab for entries that have no uninstaller file.
  2. Run a registry rescan to refresh the entry and repopulate its uninstaller path.
  3. Uninstall or clean such entries through their proper method (store, MSI, or manual delete).
Defensive patterns

Strategy: validation

Validate before calling

if (string.IsNullOrEmpty(entry.UninstallerFullFilename))
    /* disable / skip the File info tab */

Prevention

When it happens

Trigger: Opening the File info tab for an orphaned or stub entry; an entry registered with only a display name and no UninstallerString; a portable or scan-only entry without a classic uninstaller.

Common situations: Selecting a leftover registry entry whose uninstaller was already removed; UWP/store apps without classic uninstallers; manually-added entries.

Related errors


AI-assisted analysis of BCUninstaller/Bulk-Crap-Uninstaller@608321de98 (2026-08-13). Data as JSON: /api/errors/576bd0d12e2f7a74. Report an issue: GitHub.