Всем привет, сегодня покажу как можно выполнить любую CMD команду из своего приложения. Вы спросите для чего? Отвечаю, иногда вместо того, чтобы писать сложную логику программы или отсутствия таковых библиотек в framework, можно использовать команды cmd, это сильно упрощает задачу.
Рассмотрим пример изменения даты из C# с помощью CMD команды.
1 2 3 4 5 6 |
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
1 |
using System.Diagnostics; |
Свойство CreateNoWindow с установленным значением true; говорит о том, что нужно показать консольное окно терминала, если установить false черного окна мы не увидим.
1 2 |
UseShellExecute = false; //Отключаем любой инферфейс у процесса, чтобы небыло никаких окон CreateNoWindow = true; //отключаем также отображение на панеле задач |
Литерал /c говорит, что после него идет команда, которую необходимо выполнить.
Рассмотрим пример команды ping выполненной из приложения по средствам cmd
1 2 3 4 5 6 7 |
Process proc = Process.Start(new ProcessStartInfo { FileName = "ping", Arguments = "127.0.0.1", UseShellExecute = false, //Отключаем любой инферфейс у процесса, чтобы небыло никаких окон CreateNoWindow = true, //отключаем также отображение на панеле задач }); |
Стоит так же учитывать то, что большинство операций используемых cmd нужно выполнять с правами администратора, иначе доступ к ним будет запрещен.
Как можно получить ответ из командной строки на C#?
Возьмем пример выше, и получим результат внутри нашего приложения:
1 2 3 4 5 6 7 8 9 10 11 |
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); |