From 328b0d8ac07c33da175b461d6f440bbc63456f78 Mon Sep 17 00:00:00 2001 From: Webber Date: Tue, 21 Apr 2020 22:54:34 +0200 Subject: [PATCH] Add system extension for Process --- .../Assets/Editor/System.meta | 3 ++ .../Assets/Editor/System/ProcessExtensions.cs | 42 +++++++++++++++++++ .../Editor/System/ProcessExtensions.cs.meta | 3 ++ 3 files changed, 48 insertions(+) create mode 100644 action/default-build-script/Assets/Editor/System.meta create mode 100644 action/default-build-script/Assets/Editor/System/ProcessExtensions.cs create mode 100644 action/default-build-script/Assets/Editor/System/ProcessExtensions.cs.meta diff --git a/action/default-build-script/Assets/Editor/System.meta b/action/default-build-script/Assets/Editor/System.meta new file mode 100644 index 00000000..1de4baf0 --- /dev/null +++ b/action/default-build-script/Assets/Editor/System.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b5da3bd7e18c43d79243410166c8dc9a +timeCreated: 1587493708 \ No newline at end of file diff --git a/action/default-build-script/Assets/Editor/System/ProcessExtensions.cs b/action/default-build-script/Assets/Editor/System/ProcessExtensions.cs new file mode 100644 index 00000000..7aeaab76 --- /dev/null +++ b/action/default-build-script/Assets/Editor/System/ProcessExtensions.cs @@ -0,0 +1,42 @@ +using System.Diagnostics; +using System.Text; + +public static class ProcessExtensions +{ + // Execute an application or binary with given arguments + // + // See: https://stackoverflow.com/questions/4291912/process-start-how-to-get-the-output + public static int Run(this Process process, string application, + string arguments, string workingDirectory, out string output, + out string errors) + { + // Configure how to run the application + process.StartInfo = new ProcessStartInfo { + CreateNoWindow = true, + UseShellExecute = false, + RedirectStandardError = true, + RedirectStandardOutput = true, + FileName = application, + Arguments = arguments, + WorkingDirectory = workingDirectory + }; + + // Read the output + var outputBuilder = new StringBuilder(); + var errorsBuilder = new StringBuilder(); + process.OutputDataReceived += (_, args) => outputBuilder.AppendLine(args.Data); + process.ErrorDataReceived += (_, args) => errorsBuilder.AppendLine(args.Data); + + // Run the application and wait for it to complete + process.Start(); + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + process.WaitForExit(); + + // Format the output + output = outputBuilder.ToString().TrimEnd(); + errors = errorsBuilder.ToString().TrimEnd(); + + return process.ExitCode; + } +} diff --git a/action/default-build-script/Assets/Editor/System/ProcessExtensions.cs.meta b/action/default-build-script/Assets/Editor/System/ProcessExtensions.cs.meta new file mode 100644 index 00000000..b88e19e1 --- /dev/null +++ b/action/default-build-script/Assets/Editor/System/ProcessExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 29c1880a390c4af7be821b7877602815 +timeCreated: 1587494270 \ No newline at end of file