2012-12-30 8 views
5

は、私は、Windowsエクスプローラを閉じますJavaアプリケーションがWindows Explorerを正常に終了したが、再起動に失敗するのはなぜですか?私のJavaアプリケーションで

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

を使用しています。この部分は、Explorerが本当に私のために働くのを止めるので機能します。

残念ながら、私が使用している場合

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

Windowsのエクスプローラでは全く再起動しません。正しく再起動するにはどうすればよいですか?

+9

キリングエクスプローラは非常に迷惑です。なぜあなたはそれをしたいのですか? – SLaks

+0

私はユーザーが無視することは不可能なログインをしたいので。エクスプローラが動作し続けると、キーボードのウィンドウボタンを使いやすくなります。 – tb96

+2

エクスプローラを強制終了するのは間違った方法です。実際に動作する方法はありますが、実際にJavaで実行することはできません。 – SLaks

答えて

1

私は、あなたがJavaから外部プログラムを実行しているので、それがあなたのためにはうまくいかない理由はわかりません、私はそれが再起動していないJavaの欠陥ではないと思います。あなたは再起動します。

代わり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(); 
     } 
    } 
} 
関連する問題