BCUninstaller/Bulk-Crap-Uninstaller · warning · ArgumentException

No commands specified

Error message

No commands specified

What it means

ArgumentException thrown after the argument loop if _queryType is still None, meaning no command token (u/uninstall or l/list) was provided at all. The tool requires a command to know what to do.

Source

Thrown at source/WinUpdateHelper/Program.cs:99

                    case @"l":
                    case @"list":
                        if (_queryType != QueryType.None) throw new ArgumentException(@"Multiple commands specified");
                        _queryType = QueryType.List;
                        break;

                    default:
                        if (_queryType != QueryType.Uninstall)
                            throw new ArgumentException($@"Unknown argument: {arg}");
                        if (_updateId != null)
                            throw new ArgumentException(@"Multiple UpdateIDs specified");
                        _updateId = arg;
                        break;
                }
            }

            if (_queryType == QueryType.None)
                throw new ArgumentException(@"No commands specified");

            if (_queryType == QueryType.Uninstall && _updateId == null)
                throw new ArgumentException(@"No UpdateID specified");
        }

        private enum QueryType
        {
            None,
            Uninstall,
            List
        }
    }
}

View on GitHub (pinned to 608321de98)

Solutions

  1. Always include a command: 'list' or 'uninstall <UpdateID>'.
  2. If calling programmatically, assert the argument array is non-empty and contains a command before launching.
  3. Add a usage/help printout when args.Length==0 to guide users.

Example fix

// before
WinUpdateHelper.exe
// after
WinUpdateHelper.exe list
Defensive patterns

Strategy: validation

Validate before calling

if (!args.Any()) throw new ArgumentException("No commands specified");

Type guard

bool HasCommand(IEnumerable<string> args) =>
    args.Any(a => new[]{"u","uninstall","l","list"}.Contains(a.ToLowerInvariant()));

Prevention

When it happens

Trigger: Running the executable with no args, or with only an UpdateID and no command, or with only unrecognized tokens that never set _queryType.

Common situations: Bare 'WinUpdateHelper.exe' with no arguments. Passing only an ID because the user assumed positional semantics. A wrapper that strips args in error and launches with an empty array.

Related errors


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