C# Process Start нужны аргументы с двойными кавычками - они исчезают

Я пытаюсь запустить приложение строки cmd из C#, используя Process.Start(ProcessStartInfo);

Проблема в том, что приложение строки cmd является автономным.exe-файлом matlab и имеет необязательные аргументы, означающие, что вы передаете их в строку cmd следующим образом:

app.exe "optional1" optional1value "optional2" optional2value

Где option1value - целое число или строка и т. Д.

Проблема, с которой мы сталкиваемся, заключается в том, что двойные кавычки не передаются как часть аргумента "option1", и поэтому я считаю, что cmd.exe получает что-то вроде:

app.exe optional1 optional1value optional2 optional2value

или что-то в этом роде, что синтаксический анализатор Matlab, очевидно, путает.

Я пытался:

@"""optional1"" optional1value ""optional2" optional2value"""

как предлагалось некоторыми в других SO-вопросах, касающихся двойных кавычек в аргументах строки cmd, но, похоже, это не работает для меня, а также:

"\"optional1\" optional1value \"optional2\" optional2value\""

Я написал небольшую командную строку C#.exe, чтобы распечатать аргументы, которые он получает. Если я помещаю аргументы командной строки в VS Project->Debug area и запускаю его, то он печатает их с двойными кавычками, но из-за всех экранировок и т. Д., Когда я делаю это в коде,.exe печатает аргументы без каких-либо двойных кавычек.

Я нашел эту статью об этом, возможно, являющемся ошибкой в ​​анализаторе cmd.NET 3.5, но не могу найти жизнеспособное решение.

У кого-нибудь есть какие-либо идеи?

Спасибо за ваше время,

Пончо

PS Есть ли способ узнать, что cmd.exe получает при отправке аргументов через Process.Start()? У меня есть процесс, открывающий окно cmd, но было бы неплохо увидеть строку cmd.exe, например: "app.exe необязательный1 необязательный1 значение" и т. Д.

Еще раз спасибо.

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 - это объявляет количество своих аргументов и их значения, с этим вводом:

"optional1"
optional1value
"optional2"
optional2value
Другие вопросы по тегам