Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   C# и CMD (http://forums.kuban.ru/f1024/c_i_cmd-6051722.html)

LostDaemon 02.09.2014 08:18

C# и CMD
 
Добрый день!

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

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

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

SheLLest 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());

SheLLest 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");
**

LostDaemon 02.09.2014 08:52

Большое спасибо! Первый пример подошел на 100%


Текущее время: 02:29. Часовой пояс GMT +3.