diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
index 3cadae176..7d4741630 100644
--- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
+++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
@@ -33,6 +33,8 @@ namespace Flow.Launcher.Plugin
/// Run a shell command or external program
///
/// The command or program to run
+ /// Thrown when unable to find the file specified in the command
+ /// Thrown when error occurs during the execution of the command
void ShellRun(string cmd);
///
diff --git a/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs b/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs
index c5d43a3d9..a2eea19a7 100644
--- a/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/ShellCommand.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
@@ -60,17 +60,39 @@ namespace Flow.Launcher.Plugin.SharedCommands
return sb.ToString();
}
- public static ProcessStartInfo SetProcessStartInfo(this string fileName, string workingDirectory = "", string arguments = "", string verb = "")
+ public static ProcessStartInfo SetProcessStartInfo(this string fileName, string workingDirectory = "", string arguments = "", string verb = "", bool createNoWindow = false)
{
var info = new ProcessStartInfo
{
FileName = fileName,
WorkingDirectory = workingDirectory,
Arguments = arguments,
- Verb = verb
+ Verb = verb,
+ CreateNoWindow = createNoWindow
};
return info;
}
+
+ ///
+ /// Runs a windows command using the provided ProcessStartInfo
+ ///
+ /// Thrown when unable to find the file specified in the command
+ /// Thrown when error occurs during the execution of the command
+ public static void Execute(ProcessStartInfo info)
+ {
+ Execute(Process.Start, info);
+ }
+
+ ///
+ /// Runs a windows command using the provided ProcessStartInfo using a custom execute command function
+ ///
+ /// allows you to pass in a custom command execution function
+ /// Thrown when unable to find the file specified in the command
+ /// Thrown when error occurs during the execution of the command
+ public static void Execute(Func startProcess, ProcessStartInfo info)
+ {
+ startProcess(info);
+ }
}
}
diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs
index c528b8229..6ca14c215 100644
--- a/Flow.Launcher/PublicAPIInstance.cs
+++ b/Flow.Launcher/PublicAPIInstance.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
@@ -14,6 +14,7 @@ using Flow.Launcher.Infrastructure.Image;
using Flow.Launcher.Plugin;
using Flow.Launcher.ViewModel;
using Flow.Launcher.Plugin.SharedModels;
+using Flow.Launcher.Plugin.SharedCommands;
using System.Threading;
using System.IO;
using Flow.Launcher.Infrastructure.Http;
@@ -102,15 +103,10 @@ namespace Flow.Launcher
SettingWindow sw = SingletonWindowOpener.Open(this, _settingsVM);
});
}
-
public void ShellRun(string cmd)
{
- System.Diagnostics.Process process = new();
- var startInfo = process.StartInfo;
- startInfo.FileName = "cmd.exe";
- startInfo.Arguments = $"/C {cmd}";
- startInfo.CreateNoWindow = true;
- process.Start();
+ var startInfo = ShellCommand.SetProcessStartInfo("cmd.exe", arguments: $"/C {cmd}", createNoWindow: true);
+ ShellCommand.Execute(startInfo);
}
public void StartLoadingBar() => _mainVM.ProgressBarVisibility = Visibility.Visible;
diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs
index 0a934ab32..c6b4999e1 100644
--- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs
@@ -251,7 +251,7 @@ namespace Flow.Launcher.Plugin.Shell
{
try
{
- startProcess(info);
+ ShellCommand.Execute(startProcess, info);
}
catch (FileNotFoundException e)
{
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
index 282c8a25d..fcf2df4a5 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
@@ -190,8 +190,8 @@ namespace Flow.Launcher.Plugin.Sys
var info = ShellCommand.SetProcessStartInfo("shutdown", arguments:"/h");
info.WindowStyle = ProcessWindowStyle.Hidden;
info.UseShellExecute = true;
-
- Process.Start(info);
+
+ ShellCommand.Execute(info);
return true;
}