2

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パスを抽出する必要がありますか?もしそうなら、私はそれをどのように行うでしょうか?

4

3 に答える 3

2

「開始」は別のプロセスを起動するため、プロセスは完了です。ただし、lnkファイルから実際の実行可能パスを抽出できます。この投稿を見てください。

于 2012-05-02T16:32:03.973 に答える
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ファイルを解析するよりも簡単です。

于 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 に答える