[Issues] Java ProcessBuilder directory path

flexin·2022년 2월 22일
0

Issues

목록 보기
2/4
post-thumbnail

📌개요

체온 측정 관련해서 다른 회사의 라이브러리를 사용해서 사용하던 중
여러가지 많은 문제들 때문에 결국 두 프로그램을 동시실행해서 사용하기로 되었다.

우리쪽 프로그램은 설치 시 레지스트리로 자동 재실행 되도록 설정이 가능한데
다른 회사 측 프로그램은 설치파일도 따로 없고 설정이 불가했다.

우리 쪽 프로그램 실행 시 다른 프로그램도 같이 실행해주려 했다.
원래 ProcessBuilder()를 통해 exe파일을 실행해서 썼었는데
프로젝트의 root의 경로면 바로 실행 가능한데
하위 폴더 아래에 있는 exe파일은 실행되지 않았다.

사실 root 경로에 프로그램을 넣고 바로 써도 되지만,
이것저것 참조하는 dll파일 등 여러가지가 많아 보기 싫다는 이유로 또 강박 증상이.. 😂

ProcessBuilder의 매개변수로 하위 디렉토리를 곧바로 설정 할 수는 없었다.

directory를 변경하는 [ cd ] 명령어는 쉘 내장 명령어이기 때문에
별개의 실행파일로 존재하지 않는다고 한다..!
무슨 소리인지 모르겠지만 검색시작!!


📌개발환경

  • Windows 10 Pro
  • Eclipse Mars 2.0 (x32)
  • Java 8

📌해결방안

📃 ProcessBuilder().directory()

ProcessBuilder 객체에는 directory(File file) 메소드가 존재한다.
directory 메소드를 통해 실행할 파일의 경로를 지정할 수 있다.
라고 하는데 안먹힌다..^^

추가적인 cmd 명령어를 통해 디렉토리를 잡을 수 있었다.

List 객체에 "rundll32.exe", "url.dll,FileProtocolHandler", "execute file name" 커맨드를 담아 ProcessBuilder의 커맨드에 추가해준다.

그리고 나서 directory에 현재 위치 및 하위폴더의 경로를 설정해주면 아주 잘 실행된다.

String path = System.getProperty("user.dir");
  
List<String> cmd = new ArrayList<String>();
cmd.add("rundll32.exe");
cmd.add("url.dll,FileProtocolHandler");
cmd.add("EXECUTE FILE NAME");
  
new ProcessBuilder(cmd).directory(new File(path + "SUB_FOLDER")).start();

📌 결론

사실 cmd 명령이나 Window 관련 라이브러리 액세스는 봐도 봐도 모르겠다.. :(
processBuilder() 매개변수로 하위폴더까지 한번에 지정될 것이라 생각했는데,
생각보다 그리 간단하게 흘러가진 않았다..

rundll32.exe 관련 참고 자료
>>rundll32.exe 프로세스<<

경로설정 관련 참고 자료
>> Setting working directory for ProcessBuilder is not working By stackoverflow <<

profile
Developer

0개의 댓글