BCUninstaller/Bulk-Crap-Uninstaller · warning · ArgumentException

No UpdateID specified

Error message

No UpdateID specified

What it means

ArgumentException thrown after the argument loop when _queryType is Uninstall but _updateId is still null. The uninstall command requires an UpdateID operand; omitting it is an error.

Source

Thrown at source/WinUpdateHelper/Program.cs:102

                        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. Supply the UpdateID immediately after the uninstall command.
  2. In a wrapper, assert the ID variable is non-empty before building the command line.
  3. Run 'list' first to obtain valid UpdateIDs if unsure of the value.

Example fix

// before
WinUpdateHelper.exe uninstall
// after
WinUpdateHelper.exe uninstall 12345678-1234-1234-1234-1234567890ab
Defensive patterns

Strategy: validation

Validate before calling

var lower = args.Select(a => a.ToLowerInvariant()).ToList();
if (lower.Contains("u") || lower.Contains("uninstall"))
    if (args.Length < 2) throw new ArgumentException("No UpdateID specified");

Type guard

bool HasUninstallId(IList<string> args)
{
    var i = args.Select((a,idx) => (a.ToLowerInvariant(), idx))
        .FirstOrDefault(t => t.Item1 == "u" || t.Item1 == "uninstall").Item2;
    return i >= 0 && i + 1 < args.Count && !string.IsNullOrWhiteSpace(args[i + 1]);
}

Prevention

When it happens

Trigger: Running 'uninstall' or 'u' with no following UpdateID token. The ID token was consumed/rejected before reaching the assignment (e.g. it matched a command word by accident).

Common situations: User runs 'WinUpdateHelper uninstall' expecting a prompt. A wrapper passes the command but not the ID due to an empty variable. Whitespace-only ID that collapses to nothing.

Related errors


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