aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/Scripting/CmdCommand.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/Scripting/CmdCommand.cs')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Scripting/CmdCommand.cs60
1 files changed, 60 insertions, 0 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Scripting/CmdCommand.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Scripting/CmdCommand.cs
new file mode 100644
index 000000000..2ee0d83d9
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Scripting/CmdCommand.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core;
+
+namespace Tango.PPC.Common.Scripting
+{
+ public class CmdCommand : ExtendedObject
+ {
+ private Process _process;
+
+ public String Arguments { get; set; }
+
+ public TimeSpan Timeout { get; set; }
+
+ public CmdCommand(String processName, String arguments)
+ {
+ Timeout = TimeSpan.FromSeconds(5);
+
+ _process = new Process();
+ _process.StartInfo.CreateNoWindow = true;
+ _process.StartInfo.FileName = processName;
+ _process.StartInfo.UseShellExecute = false;
+ _process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ _process.StartInfo.RedirectStandardError = true;
+ _process.StartInfo.RedirectStandardOutput = true;
+ _process.StartInfo.Arguments = arguments;
+ Arguments = arguments;
+ }
+
+ public Task Run()
+ {
+ return Task.Factory.StartNew(() =>
+ {
+ LogManager.Log($"Starting process {_process.StartInfo.FileName} with arguments {Arguments}...");
+ _process.Start();
+ _process.WaitForExit((int)Timeout.TotalMilliseconds);
+
+ if (_process.HasExited)
+ {
+ LogManager.Log($"Process exited with exit code {_process.ExitCode}.");
+ LogManager.Log($"Process Standard Output:\n{_process.StandardOutput.ReadToEnd()}");
+ LogManager.Log($"Process Standard Error:\n{_process.StandardError.ReadToEnd()}");
+ if (_process.ExitCode != 0)
+ {
+ throw new IOException($"The process {_process.StartInfo.FileName} has exited with the code {_process.ExitCode}.");
+ }
+ }
+ else
+ {
+ throw new TimeoutException($"The process {_process.StartInfo.FileName} has not exited within the given timeout of {Timeout.TotalSeconds} seconds.");
+ }
+ });
+ }
+ }
+}