为什么我的Java应用程序成功关闭了Windows资源管理器,但又无法重新启动它?

时间:2012-12-30 17:38:14

标签: java windows-7 windows-explorer kill-process

在我的java应用程序中,我使用

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

关闭Windows资源管理器。这部分有效,因为Explorer真的停止为我工作。

不幸的是,当我使用

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

Windows资源管理器根本不重启。我应该如何正确地重启?

3 个答案:

答案 0 :(得分:1)

我不知道为什么这对你不起作用的原因,因为你正在从java执行一个外部程序,我认为它没有重新启动不是Java的错,也许你的方式有问题重新开始。 我会给你一个替代方案:

尝试使用Runtime.exec()来启动流程,而不是使用ProcessBuilder.start() 使用类destroy()中的方法Process来终止进程。 它应该可以正常工作,只需使用构建器创建一个代表资源管理器的对象,并将其分配给Process类型的变量。

我认为使用ProcessBuilder可能更容易的唯一原因是因为它将参数作为单独的字符串,并且可能使配置脚本变得更容易。

示例:

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

试一试,我认为它应该有用。

答案 1 :(得分: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 ();
      }
   }
}

答案 2 :(得分:0)

最后,我找到了一种对我有用的方法,powershell命令“ Stop-Process”对我有帮助,并且该命令必须具有“ -force”参数。 check Stop-Process command

   //java program
   ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "powershell","Stop-Process - 
   ProcessName explorer -Force");
   Process p = pb.start();