2011-08-22 1 views
5

Process.Start("echo", "%cd%")을 시도하면 System.ComponentModel.Win32Exception: The system cannot find the file specified이 발생합니다. cmd에서이 작업을 수동으로 수행하면 정상적으로 작동합니다. 나는 차이가 있다는 것을 결코 알지 못했다 ...Process.Start ("echo", "% cd %")는 W32Exception 파일을 반환하지 않습니다.

나는 분명히 거기에 있어야하는 파일의 File.Exists(logfile.txt) (w/o 경로)을 할 때 false를 반환한다. 이것은 위의 echo에 대한 이유입니다 : 디버깅 ...

이 오류는 내 개발 기계에서는 테스트하지 않는 다른 곳에서만 발생합니다.

경로 변수가 정상적으로 보입니다. 둘 다 WinXP입니다. 모두 실행하지만, 내부의 명령 아닌 에코로 .NET 3.5

+0

왜 경로없이 파일에 액세스하고 있습니까? 'Environment.CurrentDirectory'에 의해 현재 작업 디렉토리를 가져올 수 있습니다. – Yahia

답변

9

는 지금까지 Process.Start("cmd.exe", "/c echo %CD%")

을 시도 실행하고 있습니다.

+2

/C 명령 : 지정된 명령을 실행하고 리턴합니다. 그게 무슨 뜻인지 궁금합니다. – Codezilla

1

echo은 응용 프로그램이 아닌 콘솔 명령이므로 - 자체 실행 파일에 저장되어 있지 않기 때문입니다.

파일 존재 문제는 경로없이 파일 이름을 사용하면 작업 디렉토리에서 볼 수 있습니다. 이것은 실행중인 응용 프로그램이있는 디렉토리와 다를 수 있으며 생각하는 위치와 완전히 다를 수 있습니다. 파일이 있어야합니다 - 응용 프로그램 구성을 인식 한 후에 경로를 완전히 한정해야합니다.

2

응용 프로그램의 작업 디렉토리를 cmd로 전달하려면 System.Environment.CurrentDirectory을 사용할 수 있습니다. AFAIK % CD %는 cmd 내부에 있으므로 Process.Start가 확장하지 않습니다. 일반적인 환경 변수의 경우 Environment.ExpandEnvironmentVariables을 사용할 수 있습니다.