2012-04-30 2 views
0

java의 ProcessBuilder를 통해 Windows BAT 파일을 호출하는 Tomcat 서블릿이 있습니다. BAT 파일 내의 명령에 1000자가 넘으면 프로세스가 ProcessBuilder의 리턴 코드 128과 함께 실패합니다.Windows 박쥐 파일을 호출하는 Tomcat 어딘가에 1000 자 제한이 있습니까?

매우 이상한 - 내가 BAT 파일을 편집하고 문제가되는 명령에 약간의 공백을 두어 오류를 일으킬 수 있습니다 ... 아니면 공백을 제거 할 수 있으며 모든 것이 정상적으로 실행됩니다.

아이디어가 있으십니까?

+0

관련 항목 : http://stackoverflow.com/q/6037336/102937 –

+0

XP의 제한은 2048 자입니다. http://support.microsoft.com/kb/830473 – paulsm4

+0

@ paulsm4 : Erm .. linked는 Windows 2000 또는 Windows NT 4.0을 최대 2047 자로 지정합니다. XP의 한도는 8191 자입니다. –

답변

0

확률이 쉘의 명령 이름 제한을 초과 한 것보다 큽니다.

BAT 파일 내에서 CMD.EXE 프로그램은 Tomcat이 아니라 행을 읽습니다. Tomcat은 제공된 BAT 파일 인수를 사용하여 CMD.EXE 프로세스를 시작했습니다.

+0

최소 한계는 [2048 자로 표시됩니다] (http://blogs.msdn.com/b/oldnewthing/archive/2003/12/10/56028.aspx). –

+0

정보를 제공해 주셔서 감사합니다. 내가 부르고있는 박쥐 파일은 내 통제하에 있지 않다. 문제가되는 줄은 Jython 인터프리터를 예상 된 클래스 경로, pythonpath 등으로 시작하는 자바 명령입니다. 이상한 일은 Tomcat 환경 (bat 파일을 호출하는 서블릿)에서 실행될 때만 실패합니다. bat 파일을 호출하는 일반적인 Java 응용 프로그램이 있으면 완벽하게 작동합니다. –

0

자바의 바람둥이의 한계가 아닙니다. Windows의 한계입니다. 심지어 유닉스 시스템조차도 일반적으로 훨씬 더 큰 종류의 제한이 있습니다.

그래서 문제를 해결하려면 긴 명령 줄을 만들지 마십시오. 박쥐 파일을 수정할 수 없으면 변형 할 수없는 파일을 실행하는 다른 배치 파일을 만드십시오. 이 두 번째 박쥐 파일은 런타임에 사용자 temp 아래 어딘가에서 생성 될 수 있습니다. 그런 다음이를 실행할 수 있으며 더 이상 필요하지 않을 때 제거 할 수 있습니다.

관련 문제