С# Начало процесса требует аргументов с двойными кавычками - они исчезают

Я пытаюсь запустить приложение 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