Работа с командной строкой в C#

C#   9 Январь 2013  Автор статьи:  

В данном уроке мы научимся работать с командной строкой с помощью класса Process. Для того, чтобы работать cmd(command line) необходимо запустить ее с нужными вам правами. Для этого есть возможность в классе Process запускать процесс от имени пользователя. Если вы хотите запустится от текущего пользователя, то необходимо не указывать имя пользователя и пароль. Кроме этого можно выбрать рабочую папку, которая будет являться текущей директорией для командной строки. Для того, чтобы иметь возможность читать и писать в командную строку нужно не забыть задать свойство RedirectStandardInput и RedirectStandardOutput. Теперь, чтобы читать выходной поток с командной строкой необходимо узнать кодировку, которая установлена в ней по умолчанию. Для этого откройте командную строку и введите chcp, после этого, вам выведется номер кодировки. В рамках данной статьи я не буду рассматривать, как сменить кодировку у строки в C#, но если вы хотите уметь читать выход командной стоки, то вам придется узнать это. Обычно, когда вы работаете с командной строкой вы не хотите, чтобы она мелькала перед глазами у пользователя, как сделать это будет показано в примере ниже:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
string par = "md papka";//команда, которую вы хотите выполнить
Process cmd = new Process();//создаем новый объект класса
cmd.StartInfo = new ProcessStartInfo(@"cmd.exe");//задаем имя исполняемого файла
cmd.StartInfo.CreateNoWindow = true;//не создавать окно
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//спрятать окно
cmd.StartInfo.RedirectStandardInput = true;// перенаправить вход
cmd.StartInfo.RedirectStandardOutput = true;//перенаправить выход
cmd.StartInfo.UseShellExecute = false;//обязательный параметр, для работы предыдущих
cmd.StartInfo.WorkingDirectory = path;//устанавливаю рабочую директорию
cmd.StartInfo.UserName = "test";//задаю имя пользователя
var str = new System.Security.SecureString();//nтут некоторые замуты с паролем
str.AppendChar('1');
str.AppendChar('2');
cmd.StartInfo.Password = str;//присваиваю пароль 12
cmd.StartInfo.LoadUserProfile = true;//говорю, что необходимо загрузить профиль
cmd.Start();//запускаем командную строку
cmd.StandardInput.WriteLine(par);//вводим команду

Какие проблемы могут возникнуть у вас при работе с командной строкой? Если вы будете указывать имена файлов или пути, которые содержат пробелы, то вам необходимо будет экранировать такие строки с помощью двойных кавычек:

1
2
string path = @"C:\\Program Files\";//путь содержащий пробелы
 path = "\""+path+ "\"";//экранирование

Вторая проблема заключается в том, что хоть вы и перенаправили выходной поток и теперь может спокойно читать его из StreamWriter, но вы не сможете обнаружить конца, так как консоль ожидает ввода постоянно. Обычно я перенаправляю вывод с консоли в отдельный файл, и считываю уже из него.

Работа с командной строкой в Delphi. WinExec

Научиться программировать

  • на Delphi

  • на Java

  • на C++