2011-01-07 2 views
4

파일 경로를 명령 줄 인수로 받아들이는 작은 WPF 응용 프로그램이 있습니다.프로세스가 시작되기 전에 명령 줄 인수에서 수행되는 처리/유효성 검사는 무엇입니까?

사용자가 긴 경로로 너무 많은 파일을 끌면 적어도 32 비트 WinXP에서 최대 명령 줄 길이를 초과합니다.

Windows가 지정된 장치, 경로 또는 파일을 액세스 할 수 없습니다 :

결과는 오류 창 보이고있다. 에 에 액세스 할 수있는 권한이 없습니다.

이 오류

파일 이름 또는 확장과 유사하게 나타납니다이 너무 깁니다.

이러한 경우 프로세스가 시작되지 않는 것처럼 보입니다.

필자는 드래그 앤 드롭 파일이 실제로 패스를 문자열로 전달했다고 생각했지만,이 오류는 그렇지 않다는 것을 나타내며 OS/쉘/프레임 워크의 일부는 다음과 같은 사실에 기반하여 일종의 유효성 검사를 수행하고 있습니다. 파일/디렉토리 경로이며 실패하면 프로세스가 시작되지 않습니다.

누구든지 명령 줄 인수가 .NET .exe로 전달되는 시간과 그 .exe가 시작될 때 발생하는 시간 사이에 어떤 차이가 있는지 알고 있습니까?

+1

특히 .NET과 관련이 없다고 생각합니다. – Mehrdad

답변

4

질문에 대한 대답은 다음과 같습니다. 경로 목록이 최대 명령 줄 크기를 초과하므로 프로그램을 시작할 수 없습니다.

운영 체제는 프로세스를 시작하기 전에 프로세스 작성시 해당 정보가 필요하기 때문에 명령 행을 빌드합니다. 명령 줄 길이가 최대 크기를 초과하기 때문에 운영 체제는 프로세스를 만들려고하기 전에 심지어 ERROR_FILENAME_EXCED_RANGE (sic)으로 빌드하고 실패 할 수 있습니다.

따라서 프로그램이 시작되지 않습니다.

관련 문제