在Java中我想执行一个自己执行.exe文件的.lnk快捷方式。
我像这样运行可执行文件:
String currentDir = new File(game.getGamePath()).getCanonicalPath();
ProcessBuilder processBuild = new ProcessBuilder(currentDir);
processBuild.command("cmd", "/c", "start" , currentDir);
Process = processBuild.start();
try {
Process.waitFor();
} catch (InterruptedException ex) {
Logger.getLogger(AuroraLauncher.class.getName()).log(Level.SEVERE, null, ex);
}
我希望waitFor()线程阻塞方法等到实际执行的应用程序(.exe文件)终止,然后才继续快捷方式。有没有办法简单地做到这一点,或者我必须以某种方式从.lnk中提取.exe路径?如果是这样我该怎么做?
答案 0 :(得分:2)
“start”启动一个单独的流程,因此您的流程已完成。但是您可以从lnk文件中提取实际的可执行文件路径。看看this post。
答案 1 :(得分:1)
Windows命令“start”有一个选项/ wait你必须指定告诉他必须等待进程结束。 此代码一直运行,直到您关闭记事本:
@Test
public void run() throws IOException {
String currentDir = new File(System.getProperty("user.home"),"desktop/notepad.lnk").getCanonicalPath();
ProcessBuilder processBuild = new ProcessBuilder(currentDir);
processBuild.command("cmd", "/c", "start","/wait", currentDir);
Process p= processBuild.start();
try {
p.waitFor();
} catch (InterruptedException ex) {
}
System.out.println("process terminated!");
}
比解析lnk文件更简单。
答案 2 :(得分:0)
您的代码肯定无法编译。您应该修复它以按预期编译和工作:
Process p = processBuild.start();
try {
p.waitFor(); // Ignoring the process result code.
} catch (InterruptedException ex) {
Logger.getLogger(AuroraLauncher.class.getName()).log(Level.SEVERE, null, ex);
}