Devolutions/UniGetUI · warning · InvalidOperationException

No upgradable package matching id "{PackageId}" was found.

Error message

No upgradable package matching id "{PackageId}" was found.

What it means

FindUpgradablePackage throws when the upgradable-packages snapshot has no package matching the id. Used by update operations.

Source

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

            return package;
        }

        throw new InvalidOperationException(
            $"No installed package matching id \"{request.PackageId}\" was found."
        );
    }

    private static IPackage FindUpgradablePackage(IpcPackageActionRequest request)
    {
        var package = GetUpgradablePackagesSnapshot(request.ManagerName).FirstOrDefault(candidate =>
            MatchesIdentity(candidate, request)
        );
        if (package is not null)
        {
            return package;
        }

        throw new InvalidOperationException(
            $"No upgradable package matching id \"{request.PackageId}\" was found."
        );
    }

    private static IPackage FindUpgradablePackageOrInstalledPackage(
        IpcPackageActionRequest request
    )
    {
        try
        {
            return FindUpgradablePackage(request);
        }
        catch (InvalidOperationException)
        {
            return FindInstalledPackage(request);
        }
    }

View on GitHub (pinned to 9b1d7d0eab)

Solutions

  1. Operate only on packages returned by the upgradable list
  2. Refresh the upgradable snapshot before issuing updates
  3. Treat 'no upgradable match' as already-current rather than a hard failure

Example fix

// before
await IpcPackageApi.UpdatePackageAsync(reqForFullyUpdatedPkg);
// after
if (GetUpgradablePackagesSnapshot(null).All(p => p.Id != req.PackageId))
    return Result.UpToDate();
await IpcPackageApi.UpdatePackageAsync(req);
Defensive patterns

Strategy: validation

Validate before calling

var hasUpdate = GetUpgradablePackagesSnapshot(request.ManagerName)
    .Any(p => MatchesIdentity(p, request));
if (!hasUpdate) return Result.UpToDate();

Prevention

When it happens

Trigger: Calling update on a package that has no available update.

Common situations: Already up to date; snapshot stale; updates disabled for the manager.

Related errors


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