From 16c30e9803004038316e0e373465829da1e6d98c Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Thu, 25 Nov 2021 15:47:11 -0600 Subject: [PATCH] Refactor Shell Command --- .../SharedCommands/ShellCommand.cs | 13 --- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 90 +++++++++++-------- 2 files changed, 51 insertions(+), 52 deletions(-) diff --git a/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs b/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs index c5d43a3d9..8a8c5793d 100644 --- a/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs +++ b/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs @@ -59,18 +59,5 @@ namespace Flow.Launcher.Plugin.SharedCommands GetWindowText(hwnd, sb, sb.Capacity); return sb.ToString(); } - - public static ProcessStartInfo SetProcessStartInfo(this string fileName, string workingDirectory = "", string arguments = "", string verb = "") - { - var info = new ProcessStartInfo - { - FileName = fileName, - WorkingDirectory = workingDirectory, - Arguments = arguments, - Verb = verb - }; - - return info; - } } } diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index f9fc239a5..9af5bfec8 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -193,51 +193,63 @@ namespace Flow.Launcher.Plugin.Shell var workingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var runAsAdministratorArg = !runAsAdministrator && !_settings.RunAsAdministrator ? "" : "runas"; - ProcessStartInfo info; - if (_settings.Shell == Shell.Cmd) + ProcessStartInfo info = new() { - var arguments = _settings.LeaveShellOpen ? $"/k \"{command}\"" : $"/c \"{command}\" & pause"; - - info = ShellCommand.SetProcessStartInfo("cmd.exe", workingDirectory, arguments, runAsAdministratorArg); - } - else if (_settings.Shell == Shell.Powershell) + Verb = runAsAdministratorArg, + WorkingDirectory = workingDirectory, + }; + switch (_settings.Shell) { - string arguments; - if (_settings.LeaveShellOpen) - { - arguments = $"-NoExit \"{command}\""; - } - else - { - arguments = $"\"{command} ; Read-Host -Prompt \\\"Press Enter to continue\\\"\""; - } - - info = ShellCommand.SetProcessStartInfo("powershell.exe", workingDirectory, arguments, runAsAdministratorArg); - } - else if (_settings.Shell == Shell.RunCommand) - { - var parts = command.Split(new[] { ' ' }, 2); - if (parts.Length == 2) - { - var filename = parts[0]; - if (ExistInPath(filename)) + case Shell.Cmd: { - var arguments = parts[1]; - info = ShellCommand.SetProcessStartInfo(filename, workingDirectory, arguments, runAsAdministratorArg); + info.FileName = "cmd.exe"; + info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c"); + info.ArgumentList.Add(command); + break; } - else + + case Shell.Powershell: { - info = ShellCommand.SetProcessStartInfo(command, verb: runAsAdministratorArg); + info.FileName = "powershell.exe"; + if (_settings.LeaveShellOpen) + { + info.ArgumentList.Add("-NoExit"); + info.ArgumentList.Add(command); + } + else + { + info.ArgumentList.Add("-Command"); + info.ArgumentList.Add(command); + } + break; } - } - else - { - info = ShellCommand.SetProcessStartInfo(command, verb: runAsAdministratorArg); - } - } - else - { - throw new NotImplementedException(); + + case Shell.RunCommand: + { + var parts = command.Split(new[] { ' ' }, 2); + if (parts.Length == 2) + { + var filename = parts[0]; + if (ExistInPath(filename)) + { + var arguments = parts[1]; + info.FileName = filename; + info.ArgumentList.Add(arguments); + } + else + { + info.FileName = command; + } + } + else + { + info.FileName = command; + } + + break; + } + default: + throw new NotImplementedException(); } info.UseShellExecute = true;