From e12a66deb7f43d4892fc83f92b9c279fc83eb635 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Thu, 26 Jun 2025 10:21:01 +1000 Subject: [PATCH] fix: use custom user data dir for updater WebView2 The default location was in the install directory, which is not writeable by regular users. We now store the WebView2 data directory in our AppData/Local folder. --- App/App.csproj | 2 ++ .../UpdaterUpdateAvailableViewModel.cs | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/App/App.csproj b/App/App.csproj index bd36f38..ad64991 100644 --- a/App/App.csproj +++ b/App/App.csproj @@ -17,6 +17,8 @@ preview DISABLE_XAML_GENERATED_MAIN;DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION + + 0.1.0.0 Coder Desktop Coder Desktop diff --git a/App/ViewModels/UpdaterUpdateAvailableViewModel.cs b/App/ViewModels/UpdaterUpdateAvailableViewModel.cs index 9fd6dd9..4d3c692 100644 --- a/App/ViewModels/UpdaterUpdateAvailableViewModel.cs +++ b/App/ViewModels/UpdaterUpdateAvailableViewModel.cs @@ -4,10 +4,12 @@ using System.IO; using System.Linq; using System.Threading.Tasks; +using Coder.Desktop.App.Services; using CommunityToolkit.Mvvm.ComponentModel; using Microsoft.Extensions.Logging; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Microsoft.Web.WebView2.Core; using NetSparkleUpdater; using NetSparkleUpdater.Enums; using NetSparkleUpdater.Events; @@ -174,8 +176,18 @@ public async Task Changelog_Loaded(object sender, RoutedEventArgs e) if (sender is not WebView2 webView) return; - // Start the engine. - await webView.EnsureCoreWebView2Async(); + // Start the engine with a custom user data folder. The default for + // unpackaged WinUI 3 apps is to write to a subfolder in the app's + // install directory, which is Program Files by default and not + // writeable by the user. + var userDataFolder = Path.Join(SettingsManagerUtils.AppSettingsDirectory(), "WebView2"); + _logger.LogDebug("Creating WebView2 user data folder at {UserDataFolder}", userDataFolder); + Directory.CreateDirectory(userDataFolder); + var env = await CoreWebView2Environment.CreateWithOptionsAsync( + null, + userDataFolder, + new CoreWebView2EnvironmentOptions()); + await webView.EnsureCoreWebView2Async(env); // Disable unwanted features. var settings = webView.CoreWebView2.Settings;