Всем привет, сегодня покажу как можно выполнить любую CMD команду из своего приложения. Вы спросите для чего? Отвечаю, иногда вместо того, чтобы писать сложную логику программы или отсутствия таковых библиотек в framework, можно использовать команды cmd, это сильно упрощает задачу.
Рассмотрим пример изменения даты из C# с помощью CMD команды.
Process p = new Process(); p.StartInfo.UseShellExecute = true; p.StartInfo.FileName = "cmd.exe"; p.StartInfo.Arguments = "/C" + "date 20.01.2022"; p.StartInfo.CreateNoWindow = true; p.Start();
Так же нам необходимо подключить using
using System.Diagnostics;
Свойство CreateNoWindow с установленным значением true; говорит о том, что нужно показать консольное окно терминала, если установить false черного окна мы не увидим.
UseShellExecute = false; //Отключаем любой инферфейс у процесса, чтобы небыло никаких окон
CreateNoWindow = true; //отключаем также отображение на панеле задач
Литерал /c говорит, что после него идет команда, которую необходимо выполнить.
Рассмотрим пример команды ping выполненной из приложения по средствам cmd
Process proc = Process.Start(new ProcessStartInfo { FileName = "ping", Arguments = "127.0.0.1", UseShellExecute = false, //Отключаем любой инферфейс у процесса, чтобы небыло никаких окон CreateNoWindow = true, //отключаем также отображение на панеле задач });
Стоит так же учитывать то, что большинство операций используемых cmd нужно выполнять с правами администратора, иначе доступ к ним будет запрещен.
Как можно получить ответ из командной строки на C#?
Возьмем пример выше, и получим результат внутри нашего приложения:
Process proc = new Process(); proc.StartInfo.FileName = "ping"; proc.StartInfo.Arguments = "127.0.0.1"; proc.StartInfo.UseShellExecute = false; //Отключаем любой инферфейс у процесса, чтобы небыло никаких окон proc.StartInfo.CreateNoWindow = true; //отключаем также отображение на панели задач proc.StartInfo.RedirectStandardOutput = true; proc.Start(); StreamReader srIncoming = proc.StandardOutput; string result = srIncoming.ReadToEnd() MessageBox.Show("Вывод результата: "+result);
Обработка ошибок
Важно учитывать, что некоторые команды могут завершиться с ошибкой. Поэтому всегда желательно читать StandardError
и проверять код завершения ExitCode
.
Заключение
C# позволяет удобно и безопасно запускать CMD-команды. Используя ProcessStartInfo
, вы можете получать результаты, обрабатывать ошибки и встраивать системные команды в свои приложения.