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.
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)
Solutions
- Confirm network connectivity and that the update host is reachable from the machine.
- Retry the update check later (transient server/network issues).
- Disable/configure proxy or firewall rules blocking the update domain.
- Ensure the updater download directory is writable and has free space.
- 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
- Retry transient download failures with back-off.
- Confirm network/proxy reachability before invoking the updater.
- Surface a clear 'update unavailable' state instead of crashing.
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
- Failed to download update manifest.
- Failed to download string from all mirrors.
- Failed to download file from all mirrors.
- Update file integrity check failed.
- result.Error
AI-assisted analysis of JosefNemec/Playnite@5911f4e964 (2026-08-13).
Data as JSON: /api/errors/99034c0c952b59c5.
Report an issue: GitHub.