Devolutions/UniGetUI · error · InvalidOperationException

The current UniGetUI session cannot update manager packages.

Error message

The current UniGetUI session cannot update manager packages.

What it means

Thrown by the IPC v3 per-manager update endpoint when OnUpgradeAllForManager is null. It mirrors error 80 but targets a single package manager (the 'manager' query selects which). HandleCommandAsync converts it to HTTP 400.

Source

Thrown at src/UniGetUI.Interface.IpcApi/IpcServer.cs:1614

                            "The current UniGetUI session cannot update all packages."
                        );
                    }

                    OnUpgradeAll.Invoke(null, EventArgs.Empty);
                    return IpcCommandResult.Success("update-all");
                }
            );
        }

        private async Task V3_UpdateAllPackagesForManager(HttpContext context)
        {
            await HandleCommandAsync(
                context,
                () =>
                {
                    if (OnUpgradeAllForManager is null)
                    {
                        throw new InvalidOperationException(
                            "The current UniGetUI session cannot update manager packages."
                        );
                    }

                    string managerName = GetRequiredQueryValue(context, "manager");
                    OnUpgradeAllForManager.Invoke(null, managerName);
                    return IpcCommandResult.Success("update-manager");
                }
            );
        }

        private static async Task HandlePackageActionAsync(
            HttpContext context,
            Func<IpcPackageActionRequest, Task<IpcPackageOperationResult>> action
        )
        {
            if (!AuthenticateToken(context.Request.Query["token"]))
            {

View on GitHub (pinned to 9b1d7d0eab)

Solutions

  1. Subscribe to OnUpgradeAllForManager in the host before starting the listener: ipcServer.OnUpgradeAllForManager += (_, name) => PMManager.UpgradeAllPackagesForManager(name);
  2. Verify the requested manager loaded successfully (PMPEngagement) before exposing its endpoint.
  3. As a caller, branch on the 400 body: 'session cannot update manager packages' is not retryable without restarting/re-wiring the host.

Example fix

// before: OnUpgradeAllForManager null -> HTTP 400
// after:
ipcServer.OnUpgradeAllForManager += (_, managerName) =>
    PMManager.GetManager(managerName)?.UpgradeAllPackages();
Defensive patterns

Strategy: validation

Validate before calling

// Client: detect the unavailable-per-manager response.
var body = await response.Content.ReadAsStringAsync();
if (response.StatusCode == HttpStatusCode.BadRequest &&
    body == "The current UniGetUI session cannot update manager packages.")
    return Result.Unavailable(managerName);

Prevention

When it happens

Trigger: Calling V3_UpdateAllPackagesForManager (with ?manager=<name>) while OnUpgradeAllForManager has no subscriber, or the manager name is valid but the session did not wire per-manager upgrades.

Common situations: Standalone/automated IPC use without the GUI host; invoking the endpoint during startup race before subscription; the target manager failed to initialize so the handler was never attached.

Related errors


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