JosefNemec/Playnite · error · Exception

Failed to download update file.

Error message

Failed to download update file.

What it means

Thrown by the updater after a network exception escapes downloader.DownloadFileAsync while fetching the update package. The underlying exception is logged, then re-wrapped in a generic Exception so callers get a stable error type regardless of transport. It indicates the update payload could not be retrieved from any of the configured PackageUrls.

Solutions

  1. Confirm network connectivity and that the update host is reachable from the machine.
  2. Retry the update check later (transient server/network issues).
  3. Disable/​configure proxy or firewall rules blocking the update domain.
  4. Ensure the updater download directory is writable and has free space.
  5. Temporarily disable AV real-time scanning for the updater path if it interferes.

Example fix

// before
await updater.DownloadUpdatePackage(progressHandler);

// after
int attempts = 0;
while (true)
{
    try { await updater.DownloadUpdatePackage(progressHandler); break; }
    catch (Exception e) when (++attempts < 3) { logger.Warn(e, "retry update download"); await Task.Delay(2000); }
}
Defensive patterns

Strategy: retry

Try / catch

int attempts = 0;
while (true)
{
    try { await updater.DownloadUpdatePackage(progressHandler); break; }
    catch (Exception e) when (++attempts < 3) { logger.Warn(e, "retry download"); await Task.Delay(2000); }
}

Prevention

When it happens

Trigger: DownloadUpdatePackage calls DownloadFileAsync(updateManifest.PackageUrls, updaterPath, progress); a network/HTTP/IO exception is raised (offline, DNS failure, 404, proxy block, disk write error to updaterPath).

Common situations: No internet connection; a corporate proxy/firewall blocks the update host; the update server returns an error for a listed URL; antivirus scans/quarantines the in-progress download; insufficient disk space or permissions on the updater path.

Related errors


AI-assisted analysis of JosefNemec/Playnite@5911f4e964 (2026-08-13). Data as JSON: /api/errors/99034c0c952b59c5. Report an issue: GitHub.

Appendix: source

Thrown at source/Playnite/App/Updater.cs:160

            }

            if (File.Exists(updaterPath))
            {
                if (VerifyUpdateFile(updateManifest.Checksum, updaterPath))
                {
                    logger.Info("Update already downloaded skipping download.");
                    return;
                }
            }

            try
            {
                await downloader.DownloadFileAsync(updateManifest.PackageUrls, updaterPath, progressHandler);
            }
            catch (Exception e)
            {
                logger.Error(e, "Failed to download update file.");
                throw new Exception("Failed to download update file.");
            }

            if (!VerifyUpdateFile(updateManifest.Checksum, updaterPath))
            {
                throw new Exception($"Update file integrity check failed.");
            }
        }

        public void InstallUpdate(ApplicationMode mode)
        {
            var portable = PlayniteSettings.IsPortable ? "/PORTABLE" : "";
            var fullscreen = mode == ApplicationMode.Fullscreen ? "/FULLSCREEN" : "";
            logger.Info("Installing new update to {0}, in {1} mode".Format(PlaynitePaths.ProgramPath, portable));
            playniteApp.QuitAndStart(
                updaterPath,
                @"/SILENT /NOCANCEL /DIR=""{0}"" /UPDATE {1} {2}".Format(PlaynitePaths.ProgramPath, portable, fullscreen),
                !FileSystem.CanWriteToFolder(PlaynitePaths.ProgramPath));
        }

View on GitHub (pinned to 5911f4e964)