Process.Start ("echo", "% cd%") выбрасывает файл W32Exception, который не найден - PullRequest
5 голосов
/ 22 августа 2011

Когда я пытаюсь сделать Process.Start("echo", "%cd%"), это поднимает System.ComponentModel.Win32Exception: The system cannot find the file specified.Когда я делаю это вручную в cmd, это просто работает, как и должно.Я никогда не знал, что есть разница ...

Кроме того, когда я делаю File.Exists(logfile.txt) (без пути) файла, который обязательно должен быть там, он возвращает false.Это, кстати, причина для echo выше: отладка ...

Эта ошибка не возникает на моей машине для разработки, только на другой, на которой я тестирую.Переменная пути выглядит нормально.Оба WinXP.Оба работают под управлением .NET 3.5

Ответы [ 3 ]

11 голосов
/ 22 августа 2011

Попробуйте Process.Start("cmd.exe", "/c echo %CD%")

, поскольку echo - не исполняемый файл, а команда внутри.

2 голосов
/ 22 августа 2011

Вы можете использовать System.Environment.CurrentDirectory, если хотите передать рабочий каталог своего приложения в cmd.AFAIK% CD% является внутренним для cmd, поэтому Process.Start не расширяет его.Для обычных переменных среды вы можете использовать Environment.ExpandEnvironmentVariables.

1 голос
/ 22 августа 2011

Это потому, что echo является консольной командой, а не приложением - она ​​не помещается в собственный исполняемый файл.

Что касается проблемы с существованием файла, если вы просто используете файлимя без пути, тогда оно будет выглядеть в рабочем каталоге, оно может отличаться от каталога, содержащего исполняемое приложение, и совершенно не соответствовать тому, где, по вашему мнению, должны быть файлы - вы должны полностью указать свои пути после ознакомления снастройка приложений.

...