diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs index c7db88f6ec..17bd0182db 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/InstalledPackagesPage.cs @@ -381,7 +381,7 @@ private static async Task LaunchUninstallThenReinstall(IPackage? package) reinstallOp.OperationFailed += (_, _) => TelemetryHandler.InstallPackage(package, TEL_OP_RESULT.FAILED, TEL_InstallReferral.ALREADY_INSTALLED); AvaloniaOperationRegistry.Add(uninstallOp); AvaloniaOperationRegistry.Add(reinstallOp); - _ = uninstallOp.MainThread(); + // uninstallOp runs as reinstallOp's prerequisite; launching it directly too would execute it twice concurrently _ = reinstallOp.MainThread(); } diff --git a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs index 594f750560..fa7bfe845b 100644 --- a/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs +++ b/src/UniGetUI.Avalonia/Views/SoftwarePages/SoftwareUpdatesPage.cs @@ -363,12 +363,13 @@ private static async Task LaunchUninstallThenUpdate(IPackage? package) var uninstallOp = new UninstallPackageOperation(package, uninstallOpts); uninstallOp.OperationSucceeded += (_, _) => TelemetryHandler.UninstallPackage(package, TEL_OP_RESULT.SUCCESS); uninstallOp.OperationFailed += (_, _) => TelemetryHandler.UninstallPackage(package, TEL_OP_RESULT.FAILED); - var updateOp = new UpdatePackageOperation(package, updateOpts, req: uninstallOp); + // Once uninstalled the package is gone, so the second step must install the new version fresh; a plain update would fail with "no installed package found". + var updateOp = new InstallPackageOperation(package, updateOpts, req: uninstallOp); updateOp.OperationSucceeded += (_, _) => TelemetryHandler.UpdatePackage(package, TEL_OP_RESULT.SUCCESS); updateOp.OperationFailed += (_, _) => TelemetryHandler.UpdatePackage(package, TEL_OP_RESULT.FAILED); AvaloniaOperationRegistry.Add(uninstallOp); AvaloniaOperationRegistry.Add(updateOp); - _ = uninstallOp.MainThread(); + // uninstallOp runs as updateOp's prerequisite; launching it directly too would execute it twice concurrently _ = updateOp.MainThread(); }