Указание аргументов в C # Process - PullRequest
2 голосов
/ 06 марта 2012

В Java, когда я хочу запустить процесс, я могу просто указать ему команды для запуска:

String[] commands = {"Perl", "-e", "print \"hello world\""}
ProcessBuilder processBuild = new ProcessBuilder();
processBuild.command(commands);

В C # у меня проблема, потому что мне нужно сделать то же самое, но я должен заполнить filename и arguments отдельно в виде отдельных строк:

processBuild.FileName = commands[0];
for (int x = 1; x < commands.Length; x++)
{
    processBuild.Arguments += " " + commands[x];

}

Теперь я не знаю, что будет пытаться вызвать пользователь, поэтому я не могу приспособить это к предполагаемой программе. Проблема с моим решением состоит в том, что процесс пытается запустить perl -e print "hello world". Почему это заставляет меня рассматривать это как командную строку?

Конечно, я не могу сделать что-то вроде if !start with [-/] { Surround with quotes }, потому что тогда что-то вроде "cmd / c echo hello" превращается в cmd /c "echo" "hello". Я имею в виду, я полагаю, я мог бы сделать кучу if / elses и попытаться быть умным об этом, но должен быть лучший способ?

Поэтому я обращаюсь к вам, ребята, за помощью. Как я могу запустить процесс в C #, который указывает свои аргументы не в виде строки cmd?

1 Ответ

1 голос
/ 06 марта 2012

Класс Process использовал API CreateProcess под капотом, который является одним из API самого низкого уровня, доступных для запуска процесса. Этот API отделяет исполняемый файл от аргументов, потому что он будет иметь такие же трудности, как и вы.

Два решения:

  • Запустите cmd.exe как процесс и передайте свою «команду» в качестве аргумента Это. cmd.exe сделает для вас разбор.
  • Разбор делай сам, хотя это сложно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...