2

在 Java 中,我想执行一个 .lnk 快捷方式,它自己执行一个 .exe 文件。

我像这样运行可执行文件:

 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 路径?如果是这样,我该怎么做?

4

3 回答 3

2

“开始”启动一个单独的进程,这样你的进程就完成了。但是您可以从 lnk 文件中提取实际的可执行路径。看看这个帖子

于 2012-05-02T16:32:03.973 回答
1

Windows 命令“开始”有一个选项 /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 文件更简单。

于 2012-05-02T16:56:06.403 回答
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);
 }
于 2012-05-02T16:34:03.747 回答