// In App constructor or Main() if (!IsDesktopRuntimeInstalled())
The aka.ms link auto-detects the user's architecture and downloads the Desktop Runtime (not the SDK or ASP.NET). Pro Tip: Validate Your Build with the .NET CLI Before shipping, run this command locally to see exactly what your app expects: .net desktop runtime 8
return installedVersion != null && new Version(installedVersion) >= new Version("8.0.4"); // In App constructor or Main() if (
Mastering the .NET Desktop Runtime 8: Solving the "Missing Runtime" Nightmare for Good Cons: Large file size (~70-120 MB per app)
const string runtimeKey = @"SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.WindowsDesktop.App"; using var key = Registry.LocalMachine.OpenSubKey(runtimeKey); var installedVersion = key?.GetValue("Version") as string;
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true Zero runtime dependencies. Works on Windows 7, 10, 11, and Server 2016+. Cons: Large file size (~70-120 MB per app). Must redeploy to update runtime. Strategy 2: Bootstrap with the Official Detector (The "User-Friendly" Way) Keep your app small (framework-dependent) but add a runtime check on startup.
// Direct download link for the Desktop Runtime Process.Start(new ProcessStartInfo FileName = "https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=win-x64&apphost_version=8.0.4", UseShellExecute = true );