summaryrefslogtreecommitdiff
path: root/CommandLineWrapper/JVCSCommandInvoker.cs
diff options
context:
space:
mode:
Diffstat (limited to 'CommandLineWrapper/JVCSCommandInvoker.cs')
-rw-r--r--CommandLineWrapper/JVCSCommandInvoker.cs41
1 files changed, 41 insertions, 0 deletions
diff --git a/CommandLineWrapper/JVCSCommandInvoker.cs b/CommandLineWrapper/JVCSCommandInvoker.cs
new file mode 100644
index 0000000..56d67ca
--- /dev/null
+++ b/CommandLineWrapper/JVCSCommandInvoker.cs
@@ -0,0 +1,41 @@
+using System.Diagnostics;
+using CommandLineWrapper;
+
+public static class JVCSCommandInvoker
+{
+ // Structure to hold the result of a command invocation
+ public struct InvokeResult
+ {
+ public int ExitCode { get; set; }
+ public string StandardOutput { get; set; }
+ }
+
+ // Invokes a command-line process with the given arguments and optional working directory
+ public static async Task<InvokeResult> Invoke(string[] args, string? workingDirectory = null)
+ {
+ var startInfo = new ProcessStartInfo
+ {
+ FileName = Constants.CommandLinePath.FullName,
+ Arguments = string.Join(" ", args),
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true
+ };
+
+ if (!string.IsNullOrEmpty(workingDirectory))
+ startInfo.WorkingDirectory = workingDirectory;
+
+ using (var process = new Process { StartInfo = startInfo })
+ {
+ process.Start();
+ string output = await process.StandardOutput.ReadToEndAsync();
+ await process.WaitForExitAsync();
+
+ return new InvokeResult
+ {
+ ExitCode = process.ExitCode,
+ StandardOutput = output.Trim()
+ };
+ }
+ }
+}