Как выполнить CMD команду и получить ответ на C#

Всем привет, сегодня покажу как можно выполнить любую 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, вы можете получать результаты, обрабатывать ошибки и встраивать системные команды в свои приложения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.