Как заняться пробелами в командной строке c# - PullRequest
0 голосов
/ 04 мая 2020

У меня проблемы с выполнением команды через c#. Команда состоит из двух путей, которые я должен объединить. Оба пути содержат пробелы.

        String arguments = "/K \"" + dtExecPath + "\"" + @" /f " + "\"" + tmpPackagePath + "\"";
       // arguments = AddQuotesIfRequired(arguments);
        Console.WriteLine("TEST: " + arguments);

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = @arguments;
        process.StartInfo = startInfo;
        process.Start();

Когда я выполняю код, я получаю следующую ошибку: "" C: \ Program "не может быть найден.

Сгенерированная команда выглядит как это:

TEST: /K "C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\DTEXEC.exe" /f "C:\Users\toki\source\repos\Integration Services Project1\Integration Services Project1\tmp\O2Data (1).dtsx"

В чем ошибка?

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Мне удалось решить проблему, установив startInfo.WorkingDirectory; Только тогда процесс выполняется без сбоев

0 голосов
/ 04 мая 2020

Это не проблема C#. Способ анализа аргументов зависит от запускаемого вами процесса (cmd), а не от родительского процесса.

В соответствии с документами для cmd вам необходим ровно один набор кавычек. В официальных документах неясно, как обращаться с вложенными кавычками. Эта страница указывает на то, что вы должны заключить в кавычки начало и конец; мне кажется это работает:

String arguments = "/K \"\"" + dtExecPath + "\"" + @" /f " + "\"" + tmpPackagePath + "\"\"";
...