С# Начало процесса требует аргументов с двойными кавычками - они исчезают
Я пытаюсь запустить приложение cmd из С# с помощью Process.Start(ProcessStartInfo);
Проблема заключается в том, что приложение cmd-линии является автономным .exe для Matlab и имеет необязательные аргументы, означающие, что вы передаете их в строке cmd как таковой:
app.exe "optional1" optional1value "optional2" optional2value
Где optional1value - целое число или строка и т.д.
Проблема заключается в том, что двойные кавычки не передаются как часть аргумента "optional1" , поэтому я считаю, что cmd.exe получает что-то вроде:
app.exe optional1 optional1value optional2 optional2value
или что-то в этом роде, который, по-видимому, интерпретирует матлаб-анализатор.
Я пробовал:
@"""optional1"" optional1value ""optional2" optional2value"""
как это было предложено некоторыми другими вопросами SO, касающимися двойных кавычек в аргументах строки cmd, но, похоже, это не работает для меня, и не делает:
"\"optional1\" optional1value \"optional2\" optional2value\""
Я написал небольшую командную строку С#.exe для распечатки аргументов, которые она получает. Если я поместил аргументы командной строки в область VS Project- > Debug и запустил ее, тогда она печатает их с помощью двойных кавычек, но из-за всех экранов и т.д., Когда я делаю это в коде,.exe печатает аргументы без каких-либо двойных кавычек.
Я нашел эту статью об этом, возможно, являясь ошибкой в синтаксическом анализаторе .NET 3.5 cmd, но не может найти жизнеспособного решения.
Есть ли у кого-нибудь идеи?
Спасибо за ваше время,
пончо
P.S. Есть ли способ увидеть, что получает cmd.exe при отправке аргументов с помощью Process.Start()? У меня есть процесс открытия cmd-окна, но было бы неплохо увидеть, что строка cmd.exe получает такие, как: "app.exe optional1 optional1value" и т.д.
Еще раз спасибо.
Ответы
Ответ 1
Цитаты в ProcessStartInfo.Arguments
должны быть экранированы как три кавычки ("""
). Это связано с тем, что для передачи строки, содержащей пробелы, в качестве единственного аргумента используется одна кавычка.
Смотрите документацию здесь: https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments(v=vs.110).aspx
ProcessStartInfo psi = new ProcessStartInfo("cmd_app.exe", "\"\"\"optional1\"\"\" optional1value \"\"\"optional2\"\"\" optional2value");
Process.Start(psi);
Все cmd_app.exe делает, объявляет свои # аргументов и то, что есть args, с этим вводом:
"optional1"
optional1value
"optional2"
optional2value