void RunTool(ExternalTool tool) { // Set these to somewhat useful values in case StingParser.Parse() passes when being called on one of them. string command = tool.Command; string args = tool.Arguments; // This needs it's own try/catch because if parsing these messages fail, the catch block after // the second try would also throw because MessageService.ShowError() calls StringParser.Parse() try { command = StringParser.Parse(tool.Command); args = StringParser.Parse(tool.Arguments); } catch (Exception ex) { MessageService.ShowError("${res:XML.MainMenu.ToolMenu.ExternalTools.ExecutionFailed} '" + ex.Message); return; } if (tool.PromptForArguments) { args = MessageService.ShowInputBox(tool.MenuCommand, "${res:XML.MainMenu.ToolMenu.ExternalTools.EnterArguments}", args); if (args == null) return; } if (string.IsNullOrEmpty(args) || args.Trim('"', ' ').Length == 0) { args = ""; } try { ProcessRunner processRunner = new ProcessRunner(); processRunner.WorkingDirectory = DirectoryName.Create(StringParser.Parse(tool.InitialDirectory)); if (tool.UseOutputPad) { processRunner.RunInOutputPadAsync(TaskService.BuildMessageViewCategory, command, ProcessRunner.CommandLineToArgumentArray(args)).FireAndForget(); } else { processRunner.CreationFlags = ProcessCreationFlags.CreateNewConsole; processRunner.Start(command, ProcessRunner.CommandLineToArgumentArray(args)); } } catch (Exception ex) { MessageService.ShowError("${res:XML.MainMenu.ToolMenu.ExternalTools.ExecutionFailed} '" + command + " " + args + "'\n" + ex.Message); } }
void RunTool(ExternalTool tool) { // Set these to somewhat useful values in case StingParser.Parse() passes when being called on one of them. string command = tool.Command; string args = tool.Arguments; // This needs it's own try/catch because if parsing these messages fail, the catch block after // the second try would also throw because MessageService.ShowError() calls StringParser.Parse() try { command = StringParser.Parse(tool.Command); args = StringParser.Parse(tool.Arguments); } catch (Exception ex) { MessageService.ShowError("${res:XML.MainMenu.ToolMenu.ExternalTools.ExecutionFailed} '" + ex.Message); return; } if (tool.PromptForArguments) { args = MessageService.ShowInputBox(tool.MenuCommand, "${res:XML.MainMenu.ToolMenu.ExternalTools.EnterArguments}", args); if (args == null) return; } try { if (tool.UseOutputPad) { ProcessRunner processRunner = new ProcessRunner(); processRunner.LogStandardOutputAndError = false; processRunner.ProcessExited += ProcessExitEvent; processRunner.OutputLineReceived += process_OutputLineReceived; processRunner.ErrorLineReceived += process_OutputLineReceived; processRunner.WorkingDirectory = StringParser.Parse(tool.InitialDirectory); if (args == null || args.Length == 0 || args.Trim('"', ' ').Length == 0) { processRunner.Start(command); } else { processRunner.Start(command, args); } } else { ProcessStartInfo startinfo; if (args == null || args.Length == 0 || args.Trim('"', ' ').Length == 0) { startinfo = new ProcessStartInfo(command); } else { startinfo = new ProcessStartInfo(command, args); } startinfo.WorkingDirectory = StringParser.Parse(tool.InitialDirectory); Process process = new Process(); process.StartInfo = startinfo; process.Start(); } } catch (Exception ex) { MessageService.ShowError("${res:XML.MainMenu.ToolMenu.ExternalTools.ExecutionFailed} '" + command + " " + args + "'\n" + ex.Message); } }
void AddButton_Click(object sender, RoutedEventArgs e) { EditEnable = true; ButtonsEnable = true; var newTool = new ExternalTool(); listBox.Items.Add(newTool); SelectedTool = newTool; int i = listBox.SelectedIndex; listBox.SelectedIndex = listBox.Items.Count -1; }