2012-12-30 11 views
5

W mojej aplikacji java używamDlaczego moja aplikacja Java skutecznie zamyka Eksploratora Windows, ale nie może ponownie go uruchomić?

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

aby zamknąć Eksploratora Windows. Ta część działa, ponieważ Explorer naprawdę przestaje działać dla mnie.

Niestety, kiedy używam

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

Eksplorator Windows nie uruchamia się w ogóle. Jak powinienem go poprawnie uruchomić?

+9

Killing explorer jest bardzo irytujący. Dlaczego chcesz to zrobić? – SLaks

+0

Ponieważ chcę utworzyć login, którego nie można zignorować przez użytkownika. Jeśli Eksplorator działa, łatwo jest użyć przycisku Windows na klawiaturze. – tb96

+2

Zabijanie odkrywcy to zły sposób. Są sposoby na to, co faktycznie działa, ale naprawdę nie można tego zrobić w Javie. – SLaks

Odpowiedz

1

Nie wiem, dlaczego to nie działa, ponieważ wykonujesz zewnętrzny program z java, myślę, że to nie wina Javy, że nie jest uruchamiany ponownie, może coś jest nie w porządku zrestartujesz. dam wam alternatywę:

Zamiast Runtime.exec(), spróbuj ProcessBuilder.start() do rozpoczęcia procesu i użyć metody destroy() z klasy Process zabić proces. Powinno działać poprawnie, wystarczy użyć budowniczego, aby utworzyć obiekt reprezentujący eksplorator i przypisać go do zmiennej typu Process.

Jedynym powodem, dla którego myślę, że może być łatwiej, jeśli użyjesz ProcessBuilder, ponieważ bierze argumenty jako oddzielne ciągi, i być może to ułatwia konfigurację twoich skryptów.

Przykład:

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

Spróbować myślę, że powinno działać.

0

Myślę, że problem polega na tym, że po zabiciu [explorer.exe] nie można odzyskać nowego środowiska wykonawczego. Dla mnie działało ponowne wykorzystanie środowiska uruchomieniowego, którego używałem do zabicia [explorer.exe]. Zauważyłem, że jest to przydatne do edycji niektórych zasobów systemowych z poziomu 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(); 
     } 
    } 
} 
Powiązane problemy