2025-06-13 05:10:42 +00:00
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Flow.Launcher.Command;
|
|
|
|
|
|
|
|
|
|
|
|
internal static class Program
|
|
|
|
|
|
{
|
|
|
|
|
|
[STAThread]
|
|
|
|
|
|
private static int Main(string[] args)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (args.Length == 0) return -1;
|
|
|
|
|
|
|
|
|
|
|
|
// Start process with arguments
|
2025-06-15 08:36:13 +00:00
|
|
|
|
// Usage: Flow.Launcher.Command -StartProcess -FileName <file> -WorkingDirectory <directory> -Arguments <args> -UseShellExecute <true|false> -Verb <verb> -CreateNoWindow <true|false>
|
2025-06-13 05:10:42 +00:00
|
|
|
|
if (args[0] == @"-StartProcess")
|
|
|
|
|
|
{
|
|
|
|
|
|
var fileName = string.Empty;
|
|
|
|
|
|
var workingDirectory = Environment.CurrentDirectory;
|
|
|
|
|
|
var argumentList = new List<string>();
|
|
|
|
|
|
var useShellExecute = true;
|
|
|
|
|
|
var verb = string.Empty;
|
2025-06-15 08:36:13 +00:00
|
|
|
|
var createNoWindow = false;
|
2025-06-13 05:10:42 +00:00
|
|
|
|
var isArguments = false;
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < args.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (args[i])
|
|
|
|
|
|
{
|
|
|
|
|
|
case "-FileName":
|
|
|
|
|
|
if (i + 1 < args.Length)
|
|
|
|
|
|
fileName = args[++i];
|
|
|
|
|
|
isArguments = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "-WorkingDirectory":
|
|
|
|
|
|
if (i + 1 < args.Length)
|
|
|
|
|
|
workingDirectory = args[++i];
|
|
|
|
|
|
isArguments = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "-Arguments":
|
|
|
|
|
|
if (i + 1 < args.Length)
|
|
|
|
|
|
argumentList.Add(args[++i]);
|
|
|
|
|
|
isArguments = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "-UseShellExecute":
|
|
|
|
|
|
if (i + 1 < args.Length && bool.TryParse(args[++i], out bool useShell))
|
|
|
|
|
|
useShellExecute = useShell;
|
|
|
|
|
|
isArguments = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case "-Verb":
|
|
|
|
|
|
if (i + 1 < args.Length)
|
|
|
|
|
|
verb = args[++i];
|
|
|
|
|
|
isArguments = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
2025-06-15 08:36:13 +00:00
|
|
|
|
case "-CreateNoWindow":
|
|
|
|
|
|
if (i + 1 < args.Length && bool.TryParse(args[++i], out bool createNoWin))
|
|
|
|
|
|
createNoWindow = createNoWin;
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
2025-06-13 05:10:42 +00:00
|
|
|
|
default:
|
|
|
|
|
|
if (isArguments)
|
|
|
|
|
|
argumentList.Add(args[i]);
|
|
|
|
|
|
else
|
|
|
|
|
|
Console.WriteLine($"Unknown parameter: {args[i]}");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(fileName))
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("Error: -FileName is required.");
|
|
|
|
|
|
return -2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
2025-06-13 06:13:52 +00:00
|
|
|
|
ProcessStartInfo info;
|
|
|
|
|
|
if (argumentList.Count == 0)
|
2025-06-13 05:10:42 +00:00
|
|
|
|
{
|
2025-06-13 06:13:52 +00:00
|
|
|
|
info = new ProcessStartInfo
|
2025-06-13 05:10:42 +00:00
|
|
|
|
{
|
|
|
|
|
|
FileName = fileName,
|
|
|
|
|
|
WorkingDirectory = workingDirectory,
|
|
|
|
|
|
UseShellExecute = useShellExecute,
|
2025-06-15 08:36:13 +00:00
|
|
|
|
Verb = verb,
|
|
|
|
|
|
CreateNoWindow = createNoWindow
|
2025-06-13 06:13:52 +00:00
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (argumentList.Count == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
info = new ProcessStartInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
FileName = fileName,
|
|
|
|
|
|
WorkingDirectory = workingDirectory,
|
|
|
|
|
|
Arguments = argumentList[0],
|
|
|
|
|
|
UseShellExecute = useShellExecute,
|
2025-06-15 08:36:13 +00:00
|
|
|
|
Verb = verb,
|
|
|
|
|
|
CreateNoWindow = createNoWindow
|
2025-06-13 06:13:52 +00:00
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
info = new ProcessStartInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
FileName = fileName,
|
|
|
|
|
|
WorkingDirectory = workingDirectory,
|
|
|
|
|
|
UseShellExecute = useShellExecute,
|
2025-06-15 08:36:13 +00:00
|
|
|
|
Verb = verb,
|
|
|
|
|
|
CreateNoWindow = createNoWindow
|
2025-06-13 06:13:52 +00:00
|
|
|
|
};
|
|
|
|
|
|
foreach (var arg in argumentList)
|
|
|
|
|
|
{
|
|
|
|
|
|
info.ArgumentList.Add(arg);
|
2025-06-13 05:10:42 +00:00
|
|
|
|
}
|
2025-06-13 06:13:52 +00:00
|
|
|
|
}
|
|
|
|
|
|
Process.Start(info)?.Dispose();
|
2025-06-13 05:10:42 +00:00
|
|
|
|
Console.WriteLine("Success.");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine($"Error: {ex.Message}");
|
|
|
|
|
|
return -3;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return -4;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|