6

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

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

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

不幸的是,当我使用

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

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

4

3 回答 3

1

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

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

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

例子:

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

试一试,我认为它应该工作。

于 2012-12-30T22:45:05.950 回答
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 ();
      }
   }
}
于 2013-03-25T10:47:33.463 回答
0

最后,我找到了一种适合我的方法,powershell命令“Stop-Process”帮助我,该命令必须具有“-force”参数。检查停止进程命令

   //java program
   ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "powershell","Stop-Process - 
   ProcessName explorer -Force");
   Process p = pb.start();
 
于 2020-08-04T04:19:52.670 回答