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