From 85b43b6e3e39b5f1da0870c56bddedabcec4f101 Mon Sep 17 00:00:00 2001 From: GabrielDuf Date: Thu, 4 Jun 2026 13:11:18 -0400 Subject: [PATCH] Fix PowerShell updates failing (#4865) --- .../Helpers/PowerShellPkgOperationHelper.cs | 7 ++++++- .../AbstractProcessOperation.cs | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/UniGetUI.PackageEngine.Managers.PowerShell/Helpers/PowerShellPkgOperationHelper.cs b/src/UniGetUI.PackageEngine.Managers.PowerShell/Helpers/PowerShellPkgOperationHelper.cs index c6708b113a..62b0efb45a 100644 --- a/src/UniGetUI.PackageEngine.Managers.PowerShell/Helpers/PowerShellPkgOperationHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.PowerShell/Helpers/PowerShellPkgOperationHelper.cs @@ -33,7 +33,8 @@ OperationType operation if (options.PreRelease) parameters.Add("-AllowPrerelease"); - if (!package.OverridenOptions.PowerShell_DoNotSetScopeParameter) + // Update-Module (PowerShellGet) has no -Scope parameter; only Install-Module accepts it + if (operation is OperationType.Install && !package.OverridenOptions.PowerShell_DoNotSetScopeParameter) { if ( package.OverridenOptions.Scope == PackageScope.Global @@ -66,6 +67,10 @@ package.OverridenOptions.Scope is null } ); + // Windows PowerShell 5.x defaults to TLS 1.0/1.1, which the PowerShell Gallery rejects; force TLS 1.2 so gallery operations can connect under -NoProfile + if (operation is not OperationType.Uninstall) + parameters.Insert(0, "[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;"); + return parameters; } diff --git a/src/UniGetUI.PackageEngine.Operations/AbstractProcessOperation.cs b/src/UniGetUI.PackageEngine.Operations/AbstractProcessOperation.cs index 95d8888970..9fd4c7b504 100644 --- a/src/UniGetUI.PackageEngine.Operations/AbstractProcessOperation.cs +++ b/src/UniGetUI.PackageEngine.Operations/AbstractProcessOperation.cs @@ -103,6 +103,18 @@ protected override async Task PerformOperation() Line($" - Arguments: \"{process.StartInfo.Arguments.Trim()}\"", LineType.VerboseDetails); Line($"Start Time: \"{DateTime.Now}\"", LineType.VerboseDetails); + // An empty FileName means elevation was required but no elevator (UniGetUI Elevator/GSudo) is available + if (string.IsNullOrWhiteSpace(process.StartInfo.FileName)) + { + Line( + CoreTools.Translate( + "This operation requires administrator privileges, but the elevation tool could not be found. The operation cannot continue." + ), + LineType.Error + ); + return OperationVeredict.Failure; + } + if (_requiresUACCache) { _requiresUACCache = false;