From b15cece4b8edd6ec9ad8a3ffd633d6bad842a2da Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Wed, 11 Jun 2025 21:13:09 +0800 Subject: [PATCH] Fix absolute exe file path issue --- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index b03f9c0a0..2728628d5 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -23,6 +23,13 @@ namespace Flow.Launcher.Plugin.Shell private bool _winRStroked; private readonly KeyboardSimulator _keyboardSimulator = new(new InputSimulator()); + private static readonly string[] possiblePwshPaths = new[] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"PowerShell\7\pwsh.exe"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"Microsoft\WindowsApps\pwsh.exe"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), @"scoop\apps\pwsh\current\pwsh.exe") // if using Scoop + }; + private Settings _settings; public List Query(Query query) @@ -309,7 +316,15 @@ namespace Flow.Launcher.Plugin.Shell private static Process StartProcess(ProcessStartInfo info) { - Context.API.StartProcess(info.FileName, info.WorkingDirectory, string.Join(" ", info.ArgumentList), info.Verb == "runas"); + var absoluteFileName = info.FileName switch + { + "cmd.exe" => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "cmd.exe"), + "powershell.exe" => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"WindowsPowerShell\v1.0\powershell.exe"), + "pwsh.exe" => possiblePwshPaths.FirstOrDefault(File.Exists), + "wt.exe" => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"Microsoft\WindowsApps\wt.exe"), + _ => info.FileName, + }; + Context.API.StartProcess(absoluteFileName, info.WorkingDirectory, string.Join(" ", info.ArgumentList), info.Verb == "runas"); return null; }