在我的java应用程序中,我使用
Runtime.getRuntime().exec("taskkill /F /IM " + explorer.exe).waitFor();
关闭Windows资源管理器。这部分有效,因为Explorer真的停止为我工作。
不幸的是,当我使用
时Runtime.getRuntime().exec("explorer.exe");
Windows资源管理器根本不重启。我应该如何正确地重启?
答案 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();