在我的 java 应用程序中,我使用
Runtime.getRuntime().exec("taskkill /F /IM " + explorer.exe).waitFor();
关闭 Windows 资源管理器。这部分有效,因为 Explorer 真的停止为我工作。
不幸的是,当我使用
Runtime.getRuntime().exec("explorer.exe");
Windows 资源管理器根本不会重新启动。我应该如何正确重启它?
在我的 java 应用程序中,我使用
Runtime.getRuntime().exec("taskkill /F /IM " + explorer.exe).waitFor();
关闭 Windows 资源管理器。这部分有效,因为 Explorer 真的停止为我工作。
不幸的是,当我使用
Runtime.getRuntime().exec("explorer.exe");
Windows 资源管理器根本不会重新启动。我应该如何正确重启它?
我不知道这对您不起作用的原因,因为您正在从 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();
试一试,我认为它应该工作。
我认为问题在于您杀死 [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 ();
}
}
}
最后,我找到了一种适合我的方法,powershell命令“Stop-Process”帮助我,该命令必须具有“-force”参数。检查停止进程命令
//java program
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "powershell","Stop-Process -
ProcessName explorer -Force");
Process p = pb.start();