Нельзя в командную строку передать параметры

79
06 сентября 2021, 13:00

Тут заметил, случайно, если мы попытаемся в своем приложении запустить командную строку с любыми параметрами. То откроется только окошко CMD. Вот сами проверьте

Process.Start("CMD", "ping 1.1.1.1");

Но если мы используем Powershell, то все работает.

Process.Start("Powershell", "ping 1.1.1.1");

Тестировал на разных компьютерах (Windows 7, Windows 10, Windows 2012r2) нигде не работает. Может кто знает в чем дело?

Answer 1

Можно, но вы забыли указать соответствующий ключ для CMD

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] [[/S] [/C | /K] строка]

/C Выполнение указанной команды (строки) с последующим завершением.
/K Выполнение указанной команды (строки) без последующего завершения.
/S Изменение поведения после /C или /K (см. ниже)
/Q Отключение режима вывода команд на экран (ECHO).
/D Отключение выполнения команд AutoRun из реестра (см. ниже)
/A Вывод результатов выполнения команд в формате ANSI.
/U Вывод результатов выполнения команд в формате UNICODE.
/T:fg Выбор цвета переднего плана/фона (более подробно см. COLOR /?)
/E:ON Разрешение расширенной обработки команд (см. ниже)
/E:OFF Запрет расширенной обработки команд (см. ниже)
/F:ON Разрешение символов завершения имен файлов и папок (см. ниже)
/F:OFF Запрет символов завершения имен файлов и папок (см. ниже)
/V:ON Разрешение отложенного расширения переменных среды с применением
символа '!' в качестве разделителя. Например, /V:ON разрешает
использовать !var! в качестве расширения переменной var во время
выполнения. Синтаксис var служит для расширения переменных
при вводе, что приводит к совсем другим результатам внутри
цикла FOR.
/V:OFF Запрет отложенного расширения переменных среды.

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

Process.Start("CMD", "/C ping 1.1.1.1");

Можете параметризовать указание ключа чтобы сама команда оставалась одинаковой для любой оболочки консоли.

Answer 2

Параметры в CMD передать можно и вы это делаете. Вопрос только в том какие параметры принимает и как их обрабатывает этот CMD.

Сравните выдачу cmd /? и powershell /? и увидите что они умеют.

Иначе, следуя вашей логике, можно написать winword ping 1.1.1.1 и ждать что Word запустит вам ping.

READ ALSO
Преобразовать строку в дату. mySQL

Преобразовать строку в дату. mySQL

Получаю котировки валют в XMLДата котировки передается в таком формате:

143
Ускорение миграции/изменения таблиц в MySQL?

Ускорение миграции/изменения таблиц в MySQL?

поделитесь пожалуйста мыслями, опытом

156
Как получить данные из JSON по длине строки?

Как получить данные из JSON по длине строки?

Как сделать выборку из JSON? JSON представляет из себя следующее:

161
Сделать правильный запрос SQL

Сделать правильный запрос SQL

Всем приветЕсть две таблицы products, reviews

85