Рейтинг:
10
Sergey Alexandrovich Kryukov
Я прошу прощения за неправильный ответ, который я опубликовал в первую очередь.
Проблема действительно заключается в пустых местах и только из-за второго параметра.
Первый параметр-это полный путь к файлу в одной строке, второй параметр-командная строка.
Тогда пробелы обычно не нужны, но проблема заключается в том, что приложение запускается в процессе запуска: команда разбирается на параметры командной строки, разделенные пробелами. Если какой-то параметр должен содержать пробелы внутри, он должен быть окружен кавычками, в противном случае он разбивается: анализируется как два или более параметров.
В этом примере "D:\test App\dec\dec.sln" был проанализирован как два параметра:
"D:\test" и "приложение\декабря\декабря.СЛН". Добавление цитаты make должно исправить это.
Правильное исправление показано в ответе J2015.
—СА
JF2015
Я не согласен. Эта ошибка связана с пробелами. ОП правильно использует процесс.Начало("devenv.exe", path), который запускает visual studio с решением, указанным в разделе "path". Его код отлично работает для меня, когда я использую путь без пробелов, и мое решение работает, даже если в пути есть пробелы.
Sergey Alexandrovich Kryukov
Нишант, ты прав, и твой голос "1" был правильным, я понял свою ошибку позже.
Я прошу прощения. Я поместил объяснение в обновление своего ответа.
--СА
JF2015
Я протестировал его с помощью VS2008, и это единственное решение, которое сработало для меня.
Sergey Alexandrovich Kryukov
Но я ошибся. Я исправил свой ответ: поставил подробное объяснение.
Извиняюсь.
--СА
Olivier Levrey
Это должен быть правильный ответ. Котировки для параметров не нужны. Я сделал быстрый тест, и он сработал.
Sergey Alexandrovich Kryukov
К сожалению, я ошибся. Пожалуйста, смотрите недатированный ответ для объяснения.
Спасибо.
--СА
Olivier Levrey
Я сделал тест с блокнотом и работал... тогда это, вероятно, означает, что блокнот принимает всю командную строку, а не только первый аргумент! Я должен был проверить с чем-то другим ;)
Sergey Alexandrovich Kryukov
Речь идет не о "принятии" аргумента, а о том, как приложение его анализирует.
Дополнительные символы кавычек являются частью отдельного аргумента команды, а не частью аргумента метода процесса, если хотите. Я был пойман на этой простой вещи.
--СА
ali rasoulzadeh
очень хорошее решение
string path = "\""+fileNameafter1+"\"";
Sergey Alexandrovich Kryukov
Повторная конкатенация - это плохо, потому что строка-это неизменный- никогда не делай этого.
Должно быть:
string path = string.Format(@"\{0}\", fileName);
—СА
ali rasoulzadeh
да, очень хорошо
Sergey Alexandrovich Kryukov
:-)