2014-01-23 4 views
2

첫째, 나는이 질문을 봤는데 내가 얻을 것 같다 유일한 대답은 System.exit(0); 내가 무엇을 찾고 있지 않습니다. 현재 사용중인 프로그램을 여는 중자바 프로그램 종료

Runtime runtime = Runtime.getRuntime(); 
runtime.exec("C:\\Program Files\\program folder\\program.exe"); 

이렇게하면 프로그램이 성공적으로 열립니다. 그러나 프로그램을 닫으면 완전히 다른 물고기 주전자처럼 보입니다. 권한 및 보안으로 인해 Java를 통해 프로그램을 닫을 수 있습니까? 또한 런타임을 사용하여 수행 할 수 있습니까? 아니면 더 복잡한 문제입니까? 나는 창문을 유일한 해결책은 내 질문이 될 것이다 그러나 내가 시작하면

taskkill /IM program.exe 

가하는에서 taskkill 이것이 바로 프로그램을 종료 할 사용하는 것입니다 볼 수 있듯이? 또는 종료 프로세스를 시작하기 위해 프로그램에 지시하겠습니까?

편집 :

내가 시작됩니다 프로그램이 액세스 데이터베이스

답변

4

당신이 Runtime.exec의 작업을 수행 할 때 당신은 다시 프로세스를 얻을 다룰 것이라는 점을 알려 드릴 것입니다.

http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

Runtime runtime = Runtime.getRuntime(); 
Process p = runtime.exec("C:\\Program Files\\program folder\\program.exe"); 
p.destroy() 
+0

이 방법의 유일한 문제점은 프로세스를 즉시 종료한다는 것입니다. 업데이트 도중에 프로그램이 데이터베이스를 손상시킬 수있는 경우 프로그램 종료를 시작할 수있는 방법이 없습니까? –

+0

일반적인 데이터베이스는 이러한 실패로부터 보호 될 수 있습니다. :) 그러나 Access에 대해서는 잘 모릅니다. – pveentjer

+0

그래, 정상적인 데이터베이스는 있지만 소프트웨어가 잘못 사용되면 소프트웨어가 손상됩니다. 왕실의 고통은 무엇입니까 –

1

당신은 할 수 있습니다 : 해당 프로세스 인스턴스에, 파괴하는 방법이있다

Process p2 = runtime.exec("c:\\windows\\system32\\taskkill /IM program.exe") 

그 것이다 표준 죽이지 힘있는 한 (즉/F 필요), 따라서 프로그램에 자발적으로 종료되어야 함을 알립니다.

프로그램을 시도 할 수 없지만 메모장을 열어 텍스트를 입력 한 다음 저장하기 전에이 방법으로 종료하고 메모장에서 작업 내용을 저장할지 묻습니다.

/F 옵션을 사용하면 저장하지 않은 파일을 바로 메모장이 종료되었습니다.

이것은 유닉스에서 사용자가 killkill -9 인 것과 같은 차이점이 있습니다.

이렇게하면 모든 인스턴스가 종료됩니다. 그렇지 않으면 pid를 사용해야합니다.

시그널링시 프로그램이 열린 연결을 닫고 종료하려고 할 수 있다면 프로그램 자체에 따라 달라집니다.