Ответы пользователя по тегу C
  • C# Перехват вывода запущенного консольного приложения

    ColorCast
    @ColorCast
    Человек атомоход
    Делается все через переадресацию потока вывода в String
    public  class CommandHelpers
        {
            public CommandHelpers()
            {
                Invisible = true; // При переадресации утилита должна быть скрыта
            }
    
    public bool Invisible { get; set; }
    
    private Process CreateProcess(string commandName, IEnumerable<string> paramsList, bool output = false)
            {
                string paramString = paramsList.Aggregate<string, string>(null,
                    (current, param) => current + " " + param);
                return new Process
                {
                    StartInfo =
                    {
                        FileName = commandName, // полный путь до инстансыруемого приложения
                        Arguments = paramString, // сюда передаются аргументы командной строки
                        UseShellExecute = output ? !output : !Invisible, // Параметр отвечает за фоновое выполнение
                        RedirectStandardOutput = output // Параметр отвечает за переадресацию
                    }
                };
            }
    		/// <summary>
            ///     Returns result of command execution
            /// </summary>
            /// <param name="commandName">Command name only</param>
            /// <param name="paramsList">Params and keys for command</param>
            /// <returns></returns>
            public string GetResult(string commandName, IEnumerable<string> paramsList)
            {
                var bufer = new StringBuilder();
                using (var proc = CreateProcess(commandName, paramsList, true))
                {
                    proc.Start(); // инстансыруемся
                    while (!proc.StandardOutput.EndOfStream)
                    {
                        bufer.AppendLine(proc.StandardOutput.ReadLine()); // пишем в буфер
                    }
                }
                return bufer.ToString();
            }
    	}
    Ответ написан
    Комментировать