2012-12-30 3 views
5

나는 Windows 탐색기를 닫습니다 Java 응용 프로그램이 Windows Explorer를 성공적으로 닫았지만 다시 시작하지 못하는 이유는 무엇입니까? 내 자바 응용 프로그램에서

Runtime.getRuntime().exec("taskkill /F /IM " + explorer.exe).waitFor(); 

를 사용합니다. 이 부분은 탐색기가 실제로 작동하지 않기 때문에 작동합니다.

불행하게도, 내가 사용하는 경우

Runtime.getRuntime().exec("explorer.exe"); 

Windows 탐색기에서 모두 다시 시작하지 않습니다. 어떻게 다시 시작해야합니까?

+9

살인 탐색기는 매우 귀찮습니다. 왜 그걸하고 싶니? – SLaks

+0

사용자가 무시할 수없는 로그인을 만들고 싶습니다. 탐색기가 계속 실행되면 키보드의 Windows 버튼을 사용하기가 쉽습니다. – tb96

+2

탐색기를 죽이는 것은 잘못된 방법입니다. 실제로 작동하는 방법이 있지만 Java로는 실제로 할 수는 없습니다. – SLaks

답변

1

내가 자바에서 외부 프로그램을 실행하고 있기 때문에 그것이 당신을 위해 일하지 않는 이유를 모르겠다. 자바의 잘못이 아니라고 생각한다. 어쩌면 거기에 뭔가 잘못된 것이있다. 다시 시작하십시오.

가 대신 Runtime.exec()를 사용

프로세스를 시작하기위한 ProcessBuilder.start()을 시도하고 프로세스를 죽일 클래스 Process에서 방법 destroy()를 사용 난 당신에게 대안을 제공 할 것입니다. 괜찮습니다. 빌더를 사용하여 탐색기를 나타내는 객체를 만들고 Process 변수에 할당하면됩니다.

ProcessBuilder를 사용하면 별도의 String으로 인수를 사용하기 때문에 스크립트를 쉽게 구성 할 수 있기 때문에 ProcessBuilder를 사용하는 것이 더 쉽다고 생각하는 유일한 이유입니다.

예 :

List<String> params = java.util.Arrays.asList("C:\myProgram.exe", "-arg1", "-arg2"); 
ProcessBuilder pb = new ProcessBuilder(params); 
Process process = pb.start(); 

가 그것을 나는 그것이 작동합니다 생각 해보세요.

0

나는 [explorer.exe]를 죽인 후에는 새로운 런타임 환경을 검색 할 수 없다는 문제가 있다고 생각합니다. 나를 위해 일한 것은 [explorer.exe]를 죽이기 위해 사용했던 런타임 환경을 재사용하는 것이 었습니다. Java (TM) 내에서 특정 시스템 자원을 편집 할 수 있다는 점에서 유용하다는 것을 알게되었습니다.

public class KillRestart { 
    public static void main (String [] args) { 
     Runtime runtime = Runtime.getRuntime(); 

     try { 
     System.out.println ("Killing Explorer.exe process ... "); 
     runtime.exec ("taskkill /F /IM explorer.exe /T").waitFor(); 

     // Do something wild like update system resources 

     System.out.println ("Resurrecting Explorer ..."); 
     runtime.exec ("explorer.exe"); 
     } 
     catch (InterruptedException e) { 
     e.printStackTrace(); 
     } 
     catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
}