2011-02-10 8 views
0

내 자바 프로젝트에서 다른 스레드에서 외부 .bat 파일을 실행하고 싶습니다. cmd를 프로세스가 이후에 나타납니다 - 내가하게 IntelliJ IDEA에서 로컬로 할 때 올바른 작동 그래서Windows 서비스에서 java에서 .bat 파일을 올바르게 실행하는 방법은 무엇입니까?

call chdir %~dp0 

start java <_some_arguments> 

: 나는 다음의 .bat 파일을 실행

private void posAppRunner(final String path[], final Class targetClass) { 
    new Thread(new Runnable() { 
     public void run() { 
      try { 
       String line; 
       Process p = Runtime.getRuntime().exec(path); 
       BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
       while ((line = input.readLine()) != null) { 
        System.out.println(line); 
       } 
       input.close(); 
      } catch (IOException e) { 
       LogFactory.getLog(targetClass).warn("Error when starting a PosApplication: " + e.getMessage()); 
      } 
     } 

    }).start(); 

:이 목적을 위해 나는 다음과 같은 방법을 사용 자바 프로세스가 나타나고 그 후에 cmd 프로세스가 사라진다.

하지만 TeamCity Windows 서비스에서 ANT를 통해이 Java 프로젝트를 실행하면 cmd 프로세스 만 나타나고 아무 것도 발생하지 않습니다. bat 파일에서 시작해야하는 Java 프로세스가 나타나지 않습니다. 나는 프로세스 출력을 읽지 않는 것처럼 보이지만 나는 그렇게한다!

이 상황을 어떻게 극복 할 수 있습니까?

답변

0

저는이 문제가 현재 작업 디렉토리에 있다고 생각합니다. 나는 박쥐 파일에 익숙하지 않고 심장이 %~dp0이라는 것을 기억하지 않는다. 어쨌든 하드 코드 된 경로를 포함하도록 배치 파일을 수정하려고 시도한 첫 번째 시도입니다. 나는 이것이 효과가 있다고 믿는다.

이 경우 자바 코드에서 경로를 검색 한 다음 배치 파일에 전달하고 배치 파일을 생성하여 하드 코딩 된 모든 매개 변수가 포함되도록하거나 스크립트를 디버그하십시오. 예를 들어, 당신은 start java <_some_arguments>을 제거하고 로그 파일을 할 수있는 매개 변수를 출력합니다

echo %~dp0 > c:\temp\batlog.log

이를 넣을 수 있습니다. 이제이를 서비스로 실행하고 로그 파일에 포함 된 내용을 확인하십시오. 아마 당신은 문제를 즉시 볼 수 있습니다.

+0

불행히도 작동하지 않습니다. 배치 파일에서 "call chdir % ~ dp0"문자열을 삭제 한 후에도. – Gwen

관련 문제