From 86b676ef0c1a10a5ef32736ae888a29bf2d1b30b Mon Sep 17 00:00:00 2001 From: Gabriel Dufresne Date: Tue, 5 May 2026 14:23:16 -0400 Subject: [PATCH] Fix crash --- src/UniGetUI.Avalonia/App.axaml.cs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/UniGetUI.Avalonia/App.axaml.cs b/src/UniGetUI.Avalonia/App.axaml.cs index c18ddb0f6e..a80ddff526 100644 --- a/src/UniGetUI.Avalonia/App.axaml.cs +++ b/src/UniGetUI.Avalonia/App.axaml.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using System.IO; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; @@ -10,6 +11,7 @@ using UniGetUI.Avalonia.Views; using UniGetUI.Avalonia.Views.DialogPages; using UniGetUI.Core.Data; +using UniGetUI.Core.Logging; using UniGetUI.PackageEngine; using CoreSettings = global::UniGetUI.Core.SettingsEngine.Settings; @@ -38,6 +40,12 @@ public override void OnFrameworkInitializationCompleted() { if (OperatingSystem.IsWindows()) { + // Redirect WebView2 user-data folder to a writable temp location. + // Without this, WebView2 tries to write next to the executable in + // C:\Program Files\, which is read-only for non-admin users and + // causes UnauthorizedAccessException (E_ACCESSDENIED) on startup. + SetUpWebViewUserDataFolder(); + // Safety net for NativeWebView (WebView2) initialization failures thrown // asynchronously on the dispatcher. Without this the app crashes; with it // the Help page shows a fallback "Open in browser" button. @@ -165,4 +173,21 @@ public static void ApplyTheme(string value) }; } + private static void SetUpWebViewUserDataFolder() + { + try + { + string webViewPath = Path.Join(Path.GetTempPath(), "UniGetUI", "WebView"); + if (!Directory.Exists(webViewPath)) + Directory.CreateDirectory(webViewPath); + + Environment.SetEnvironmentVariable("WEBVIEW2_USER_DATA_FOLDER", webViewPath); + } + catch (Exception e) + { + Logger.Warn("Could not set up data folder for WebView2"); + Logger.Warn(e); + } + } + }