From a2dc59924a1c231b5a16580e8bdda0480b9aa477 Mon Sep 17 00:00:00 2001 From: apman Date: Wed, 8 Jul 2026 14:15:07 -0400 Subject: [PATCH] TEMP fix by Copilot for runtime error at startup Same failure in two call paths (installed packages and updates): Process.Start receives an empty FileName in WinGetCliHelper. System.InvalidOperationException: Cannot start process because a file name has not been provided. at System.Diagnostics.Process.Start() at UniGetUI.PackageEngine.Managers.WingetManager.WinGetCliHelper.GetInstalledPackages_UnSafe() at UniGetUI.PackageEngine.Managers.WingetManager.WinGet.GetInstalledPackages_UnSafe() --- .../WinGet.cs | 11 ++++++++--- .../WinGetManagerTests.cs | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs index f75b610f44..5ccae01075 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs @@ -386,10 +386,15 @@ Func fileExists } internal IWinGetManagerHelper CreateCliHelperForSelectedCliTool() + { + return CreateCliHelperForSelectedCliTool(Status.ExecutablePath); + } + + internal IWinGetManagerHelper CreateCliHelperForSelectedCliTool(string executablePath) { return SelectedCliToolKind == WinGetCliToolKind.BundledPinget - ? new PingetCliHelper(this, Status.ExecutablePath) - : new WinGetCliHelper(this, Status.ExecutablePath); + ? new PingetCliHelper(this, executablePath) + : new WinGetCliHelper(this, executablePath); } protected override void _loadManagerExecutableFile( @@ -449,7 +454,7 @@ ex is WinGetComActivationException activationEx } Logger.Warn("WinGet will resort to using WinGetCliHelper()"); - WinGetHelper.Instance = CreateCliHelperForSelectedCliTool(); + WinGetHelper.Instance = CreateCliHelperForSelectedCliTool(path); } } diff --git a/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs b/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs index 2365d7e27c..479ca8194b 100644 --- a/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs +++ b/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs @@ -500,6 +500,25 @@ public void ShouldUseWinGetComApiNeverUsesComForBundledPingetCliTool() ); } + [Fact] + public void CreateCliHelperForSelectedCliToolUsesExplicitExecutablePath() + { + var manager = new WinGet(); + SetCliToolKind(manager, WinGetCliToolKind.SystemWinGet); + + IWinGetManagerHelper helper = manager.CreateCliHelperForSelectedCliTool( + @"C:\WindowsApps\winget.exe" + ); + + var pathField = typeof(WinGetCliHelper).GetField( + "_cliExecutablePath", + System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic + ); + + Assert.NotNull(pathField); + Assert.Equal(@"C:\WindowsApps\winget.exe", pathField.GetValue(helper)); + } + [Fact] public void NativeWinGetHelperUsesSystemCliFallbackForInstalledPackagesWhenCompositeCatalogFails() {