Devolutions/UniGetUI · error · InvalidOperationException

No ready package manager matching "{managerName}" is availab

Error message

No ready package manager matching "{managerName}" is available.

What it means

GetManagers throws 'No ready package manager matching "X"' when ready managers exist but none match the requested managerName (matched by public manager id via IpcManagerSettingsApi.MatchesManagerId).

Source

Thrown at src/UniGetUI.Interface.IpcApi/IpcPackageApi.cs:758

        return loader.Packages.Where(package => MatchesManager(package.Manager, managerName)).ToArray();
    }

    private static IReadOnlyList<IPackageManager> GetManagers(string? managerName)
    {
        var managers = PEInterface.Managers
            .Where(manager => manager.IsEnabled() && manager.IsReady())
            .Where(manager => MatchesManager(manager, managerName))
            .ToArray();

        if (managers.Length == 0)
        {
            if (string.IsNullOrWhiteSpace(managerName))
            {
                throw new InvalidOperationException("No ready package managers are available.");
            }

            throw new InvalidOperationException(
                $"No ready package manager matching \"{managerName}\" is available."
            );
        }

        return managers;
    }

    private static bool MatchesManager(IPackageManager manager, string? requestedManager)
    {
        return IpcManagerSettingsApi.MatchesManagerId(manager, requestedManager);
    }

    private static bool MatchesIdentity(IPackage package, IpcPackageActionRequest request)
    {
        if (!package.Id.Equals(request.PackageId, StringComparison.OrdinalIgnoreCase))
        {
            return false;
        }

View on GitHub (pinned to 9b1d7d0eab)

Solutions

  1. Use the public manager id returned by the get-managers/list endpoint
  2. Drop managerName to let the API match any ready manager when the specific one is optional
  3. Verify the named manager is enabled and ready first

Example fix

// before
await IpcPackageApi.InstallPackageAsync(
    new IpcPackageActionRequest { ManagerName = "Winget", PackageId = "git" });
// after
var id = (await GetManagersAsync()).First(m => m.Name == "Winget").Id; // "winget"
await IpcPackageApi.InstallPackageAsync(
    new IpcPackageActionRequest { ManagerName = id, PackageId = "git" });
Defensive patterns

Strategy: validation

Validate before calling

var validIds = PEInterface.Managers
    .Where(m => m.IsEnabled() && m.IsReady())
    .Select(IpcManagerSettingsApi.GetPublicManagerId)
    .ToHashSet(StringComparer.OrdinalIgnoreCase);
if (!validIds.Contains(managerName))
    throw new ArgumentException($"Unknown manager: {managerName}");

Prevention

When it happens

Trigger: Passing a managerName that is a typo, a display name, or refers to a disabled/not-ready manager.

Common situations: Client uses the human display name instead of the public id; that manager is disabled; casing/format mismatch.

Related errors


AI-assisted analysis of Devolutions/UniGetUI@9b1d7d0eab (2026-08-13). Data as JSON: /api/errors/70ba076b694c1a11. Report an issue: GitHub.