Merge pull request #829 from taooceros/ShellNotClose

Refactor Shell Command
This commit is contained in:
Jeremy Wu 2021-11-29 06:39:54 +11:00 committed by GitHub
commit 52046431ea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -193,51 +193,63 @@ namespace Flow.Launcher.Plugin.Shell
var workingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var workingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
var runAsAdministratorArg = !runAsAdministrator && !_settings.RunAsAdministrator ? "" : "runas"; var runAsAdministratorArg = !runAsAdministrator && !_settings.RunAsAdministrator ? "" : "runas";
ProcessStartInfo info; ProcessStartInfo info = new()
if (_settings.Shell == Shell.Cmd)
{ {
var arguments = _settings.LeaveShellOpen ? $"/k \"{command}\"" : $"/c \"{command}\" & pause"; Verb = runAsAdministratorArg,
WorkingDirectory = workingDirectory,
info = ShellCommand.SetProcessStartInfo("cmd.exe", workingDirectory, arguments, runAsAdministratorArg); };
} switch (_settings.Shell)
else if (_settings.Shell == Shell.Powershell)
{ {
string arguments; case Shell.Cmd:
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))
{ {
var arguments = parts[1]; info.FileName = "cmd.exe";
info = ShellCommand.SetProcessStartInfo(filename, workingDirectory, arguments, runAsAdministratorArg); 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 case Shell.RunCommand:
{ {
info = ShellCommand.SetProcessStartInfo(command, verb: runAsAdministratorArg); var parts = command.Split(new[] { ' ' }, 2);
} if (parts.Length == 2)
} {
else var filename = parts[0];
{ if (ExistInPath(filename))
throw new NotImplementedException(); {
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; info.UseShellExecute = true;