К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

C# и CMD

Гость
0 - 02.09.2014 - 08:18
Добрый день!

Задача: из своего консольного приложения выполнять стандартные консольные команды (к примеру "dir") и возвращать себе результат выполнения этих команд.

Сейчас выполняю команды с помощью System.Diagnostics.Process.Start, которое каждый раз создает новое окно процесса cmd.exe. Конечно можно через WinAPI достать содержимое этого окна, но это как то громоздко и грязно.

Подскажите пожалуйста более адекватный метод.



Гость
1 - 02.09.2014 - 08:41
Простой пример выполнения команды dir и принятие ответа от процесса cmd (про выставленные флаги почитаете, для чего это):

Process cmd = new Process();

cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;

cmd.Start();

/* выполнение "dir" */

cmd.StandardInput.WriteLine("dir");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
MessageBox.Show(cmd.StandardOutput.ReadToEnd());
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
Гость
2 - 02.09.2014 - 08:43
Есть ещё вот такая интересная обёртка, думаю разберётесь:

static void ExecuteCommand(string command)
**
int exitCode;
ProcessStartInfo processInfo;
Process process;

processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;

process = Process.Start(processInfo);
process.WaitForExit();

// *** Read the streams ***
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();

exitCode = process.ExitCode;

Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
process.Close();
**

static void Main()
**
ExecuteCommand("echo testing");
**
Гость
3 - 02.09.2014 - 08:52
Большое спасибо! Первый пример подошел на 100%


К списку вопросов






Copyright ©, Все права защищены