#c# #cmd #arduino #processstartinfo
#c# #cmd #arduino #processstartinfo
Вопрос:
Я создаю приложение на C #, которое компилирует код Arduino с помощью arduino-cli. Я вызываю его с помощью класса Process, используя класс ProcessStartInfo и, конечно, с помощью cmd.exe
которого это абсолютно необходимо.
arduino-cli.exe
игнорирует все аргументы и выводит следующие две строки в течение пяти секунд при непосредственном запуске вместо запуска через cmd.exe
консоль PowerShell или из нее:
Это инструмент командной строки.
Вам нужно открыть cmd.exe и запустите его оттуда.
Я могу выбрать каталог с правильным путем, но когда я выбираю другой каталог для компиляции, выводится сообщение arduino-cli.exe
об ошибке:
Ошибка: неизвестная команда «Studio» для «arduino-cli»
Я думаю, это потому, что каталог, который я выбираю, находится в папке с именем Visual Studio Projects
, содержащим пробелы в его имени, и я думаю, что он интерпретирует каждое слово как отдельный аргумент.
Как закодировать аргументы, передаваемые через cmd.exe
to arduino-cli.exe
, чтобы два имени файлов (входной и шестнадцатеричный файл) содержали пробелы в их полных именах файлов в качестве полных строк аргументов?
Я читал в Интернете, что если я добавлю @
перед path, это должно исправить, но это мало что дало.
Это также происходит, когда я запускаю arduino-cli
командную строку непосредственно в окне командной строки Windows, а не в C #. Проблема, вероятно, связана с синтаксисом командной строки.
Вот мой код на C #:
ProcessStartInfo cmd = new ProcessStartInfo();
cmd.FileName = "cmd.exe";
cmd.WindowStyle = ProcessWindowStyle.Normal;
hexFile = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) "\cache/a";
cmd.Arguments = "/k cd " Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) "\avr-g \arduino-cli\bin"
" amp; arduino-cli --compile " @inFile " --output " @hexFile " multi";
//file = hexFile;
Process.Start(cmd);
Ответ №1:
Проблема заключалась в том, что путь был слишком длинным, и ему требовалась «» вокруг пути. Вот как выглядит код сейчас —
ProcessStartInfo cmd = new ProcessStartInfo();
cmd.FileName = "cmd.exe";
cmd.WindowStyle = ProcessWindowStyle.Normal;
string name = GenerateName(8);
hexFile = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) "\cache/" name;
cmd.Arguments = "/k cd " Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) "\avr-g \arduino-cli\bin"
" amp; arduino-cli compile -b arduino:avr:uno " """ @inFile """ " --build-path " """ @hexFile """;
file = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) "\cache\" name "\" Path.GetFileName(inFile) ".hex";
Process.Start(cmd);
Thread.Sleep(3000);
``