[Java] 윈도우 cmd 명령어 실행 : Java로 실행파일 실행시키기 응용

2022. 11. 15. 11:32 JAVA/Java

[Java] 윈도우 cmd 명령어 실행 : Java로 실행파일 실행시키기 응용


 

 

1. Java에서 cmd 명령어 실행

Java의 Runtime 클래스를 이용하여 cmd 명령어를 실행할 수 있다.

Runtime.getRuntime().exec("cmd /c " + "cmd명령어");

 

2. cmd 실행 결과 받기

Runtime.exec() 로 명령어를 호출하면 그 결과가 Process 객체로 리턴받을 수 있다.

다음과 같이 Process 객체로부터 결과를 읽을 수 있다. 

Process로부터 InputStreamReader를 가져와 문자열을 읽는다.

String cmd = "cmd 명령어";
Process p = Runtime.getRuntime().exec("cmd /c " + cmd);

BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String l = null;
StringBuffer sb = new StringBuffer();
sb.append(cmd);

while ((l = r.readLine()) != null) {
    sb.append(l);
    sb.append("\n");
}

 

 

3. 응용 : VNC Viewer 실행

① 실행 버튼을 클릭

② 프로젝트 내 실행파일 실행

 

- VNC 실행파일 경로 : webapp/resource/exe/vnc-viewer.exe

 

실행파일이 필요한 분들은 다운로드 받으세요

vnc-viewer.exe
0.26MB

 

 

 

html & javascript

<button type="button">실행</button>

<script>
$("button").on("click", function() {
	$.ajax({
		url: "${ctx}/exeVnc.do",	// 컨트롤러 매핑주소
		type: 'POST',
//		data: params,		// 넘길 파라미터 있는 경우 설정
		dataType : 'json',
		contentType : 'application/x-www-form-urlencoded; charset=UTF-8',
		async: true,
		success: function(returnData){
			// 성공코드
		}
	});
});
</script>

 

 

 

 Java (Controller)

 

@RequestMapping(value="/exeVnc.do", method=RequestMethod.POST, produces="text/plain;charset=UTF-8")
@ResponseBody
public String execution(HttpServletRequest request, HttpServletResponse response) {
	
	try {
		// webapp resource 경로 가져오기    
		String path = request.getServletContext().getRealPath("resource/exe/vncviewer.exe"); 
        
		Process p = Runtime.getRuntime().exec("cmd /c " + path);
					
		BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
		String l = null;
		StringBuffer sb = new StringBuffer();
		sb.append(cmd);
					
		while ((l = r.readLine()) != null) {
			sb.append(l);
			sb.append("\n");
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
    
	return "성공";    
}

 

 

 실행화면

 

 

만약, VNC Viewer 실행 시 Server 매개변수를 세팅한 상태로 실행시키고 싶은 경우에는 cmd 명령어 부분에 서버 IP와 PORT를 같이 넘기면 된다.

 

그러면 실행했을 때 아래과 같이 패스워드 화면이 바로 표출된다.

 

Process p = Runtime.getRuntime().exec("cmd /c '실행파일경로' '서버IP:포트'");

// 예시
Process p = Runtime.getRuntime().exec("cmd /c C:\ULSAN_BIS\VNC\vnc-viewer.exe 192.0.0.1:5900");

 

 

 


 

 

여기서 주의해야할 점은 구동되고 있는 서버와 이벤트를 실행시키려는 클라이언트가 같은 서버(같은 PC)내에 있는 경우 즉, 로컬에서의 경우이다.

 

 

 

 

만약 자바 프로젝트는 특정 서버에 배포를 하고, 다른 PC에서 해당 페이지를 접속하여 이벤트를 하게된다면 실행파일은 사용자의 화면에 표출되는 것이 아닌 서버내에서 실행이 되버린다는 것을 주의하자.

 

 

출처 : https://haenny.tistory.com/266