diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-02-28 19:46:34 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-02-28 19:46:34 +0200 |
| commit | 18dafa9e98e171321d3847a208c0af5be6f57ef6 (patch) | |
| tree | 94d44edbe93ad2c95e62179ec8e2b1da9ce4dd13 /Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs | |
| parent | 5f45be5bae69be7b7e916f02fb6d69b2db60e529 (diff) | |
| download | Tango-18dafa9e98e171321d3847a208c0af5be6f57ef6.tar.gz Tango-18dafa9e98e171321d3847a208c0af5be6f57ef6.zip | |
Implemented Transport Immediate mode on TCP and SignalR.
Implemented Tango.Console components.
Diffstat (limited to 'Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs | 84 |
1 files changed, 59 insertions, 25 deletions
diff --git a/Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs b/Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs index 194ff8454..c4bdee0a8 100644 --- a/Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs +++ b/Software/Visual_Studio/Tango.Console/ConsoleExecutionEngine.cs @@ -33,56 +33,90 @@ namespace Tango.Console { if (parsedCommand.Arguments.Contains(":\\") && Directory.Exists(parsedCommand.Arguments)) { - return new ConsoleCommandExecutionResult() - { - Output = String.Empty, - WorkingFolder = parsedCommand.Arguments, - }; + return CreateResult(parsedCommand.Arguments, String.Empty); } else if (Directory.Exists(Path.Combine(command.WorkingFolder, parsedCommand.Arguments))) { - return new ConsoleCommandExecutionResult() - { - Output = String.Empty, - WorkingFolder = Path.GetFullPath(Path.Combine(command.WorkingFolder, parsedCommand.Arguments)), - }; + return CreateResult(Path.GetFullPath(Path.Combine(command.WorkingFolder, parsedCommand.Arguments)), String.Empty); } else { - return new ConsoleCommandExecutionResult() - { - Output = "The directory does not exists.", - }; + return CreateResult(null, "The directory does not exists."); } } + String output = String.Empty; + String error = String.Empty; + var process = new Process(); process.StartInfo.CreateNoWindow = true; - process.StartInfo.FileName = "cmd.exe"; process.StartInfo.UseShellExecute = false; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardInput = true; - process.StartInfo.Arguments = "/C " + command.Command; - //process.StartInfo.Verb = "runas"; - if (command.WorkingFolder != null) { process.StartInfo.WorkingDirectory = command.WorkingFolder; } + //process.StartInfo.Verb = "runas"; + + if (ConsoleDictionary.GetKnownCommands().Exists(x => x.Name.ToLower() == parsedCommand.Command)) + { + process.StartInfo.FileName = "cmd.exe"; + process.StartInfo.Arguments = "/C " + command.Command; + } + else + { + process.StartInfo.FileName = parsedCommand.Command; + process.StartInfo.Arguments = parsedCommand.Arguments; + } process.Start(); - String output = process.StandardOutput.ReadToEnd(); - String error = process.StandardError.ReadToEnd(); + bool hasGuid = false; + + try + { + process.WaitForInputIdle(5000); + hasGuid = true; + } + catch { } - return new ConsoleCommandExecutionResult() + if (!hasGuid) { - WorkingFolder = command.WorkingFolder, - Output = String.IsNullOrWhiteSpace(error) ? output.Replace(command.WorkingFolder + ">", "") : error, - }; + output = process.StandardOutput.ReadToEnd(); + error = process.StandardError.ReadToEnd(); + } + + return CreateResult(command.WorkingFolder, String.IsNullOrWhiteSpace(error) ? output.Replace(command.WorkingFolder + ">", "") : error); }); } + + private ConsoleCommandExecutionResult CreateResult(String workingFolder, String output) + { + ConsoleCommandExecutionResult result = new ConsoleCommandExecutionResult(); + result.WorkingFolder = workingFolder; + result.Output = output; + + foreach (var dir in Directory.GetDirectories(Path.GetFullPath(workingFolder))) + { + result.Suggestions.Add(new ConsoleSuggestion() + { + Type = ConsoleSuggestionType.Folder, + Name = Path.GetFileName(dir) + }); + } + + foreach (var file in Directory.GetFiles(Path.GetFullPath(workingFolder))) + { + result.Suggestions.Add(new ConsoleSuggestion() + { + Type = ConsoleSuggestionType.File, + Name = Path.GetFileName(file), + }); + } + + return result; + } } } |
