자바로 windows 프로세스 실행하기 (관리자 권한으로)

자이로 체펠리·2021년 10월 16일
0

시스템트레이딩

목록 보기
3/3

프로세스 클래스로 cmd라인 실행하기

이번에 진행하는 프로젝트는 대신 증권 사이보스를 실행하고 사이보스 인터페이스를 사용하여 데이터 취득 및 매매 주문을 넣을 수 있다.

24시간마다 사이보스가 꺼지기 때문에 스프링의 인터셉터를 활용해 다시 실행할 수 있도록 하려고 한다.

자바를 통해 cmd를 날리기 위해선 Process 클래스를 사용할 수 있다.

Process (Java Platform SE 8 )

The ProcessBuilder.start() and Runtime.exec methods create a native process and return an instance of a subclass of Process that can be used to control the process and obtain information about it.

Process 는 ProcessBuilder의 start()메서드 나 Runtime 클래스의 exec()를 사용해서 실행할 수 있다.

마네키 네코 프로젝트에서 필요한 커맨드는 다음과 같습니다.

C:\DAISHIN\STARTER\ncStart.exe /prj:cd /id:{}d} /pwd:{pwd} /pwdcert:{pwdcert} /autostart

ProcessBuilder를 사용해서 프로세스를 구동해 줍니다.

//프로세스 실행	
String[] command = new String[] {"C:\\DAISHIN\\STARTER\\ncStarter.exe","/prj:cp","/id:"+id,"/pwd:"+pwd,"/pwdcert:"+pwdcert, "/autostart"};
		Process process = new ProcessBuilder(command).start();
//실행후 인풋 스트림
		InputStream is = process.getInputStream();//Get an inputstream from the process which is being executed
		InputStreamReader isr = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(isr);
		String line;
		while ((line = br.readLine()) != null) {
		System.out.println(line);//Prints all the outputs.Which is coming from the executed Process
}

위의 두줄만 실행해도 프로세스를 실행 할 수 있다.

커맨드를 String array를 사용한 이유는 단순히 스트링으로 run()을 실행시키면 dir로 인식해 실행하지 커맨드를 실행하지 못한다.

하지만 또다른 문제가 있다.

ncStart.exe를 실행하기 위해서 관리자 권한이 필요하기 때문이다.

관리자 권한으로 응용프로그램을 실행하기 위해서

manifest 파일을 해당 응용프로그램이 있는 dir에 생성해 줘야한다.

ncStart.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.1.1.1"
   processorArchitecture="X86"
   name="ncStarter.exe"
   type="win32"/>
  <description>elevate execution level</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
   <requestedPrivileges>
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
   </requestedPrivileges>
  </security>
  </trustInfo>
 </assembly>

junit에서 테스트하기

잘 구동이 된다.

참조

NAVER D2

stackover flow

profile
"경의를 표해라. 경의를 갖고 회전의 다음 단계로 나아가는 거다…… [LESSON 4] 다."

0개의 댓글