2012-05-02 4 views
2

Javaでは、.exeファイルを自己実行する.lnkショートカットを実行したいと思います。Process.waitFor()は実行されたショートカット(.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); 
    } 

私はそれがショートカットをしませ続行する前に、実際の実行されるアプリケーション(.exeファイル)が終了するまで待つようにする方法を阻止するのwaitFor()のスレッドをしたいです。これを単純に行う方法はありますか、何とか.lnkから.exeパスを抽出する必要がありますか?もしそうなら、どうすればいいのですか?

答えて

1

Windowsのコマンドは、「開始」オプションを持っている/あなたはそれがプロセスの終了を待たなければならない彼に伝えるために指定する必要があります待ちます。 お近くのメモ帳まで実行このコード:LNKファイルを解析するよりも

@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!"); 

    } 

シンプル。

+0

ありがとうございました! –

2

"start"は別のプロセスを起動するので、プロセスは完了です。しかし、lnkファイルから実際の実行可能パスを抽出することができます。 this postをご覧ください。

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); 
} 
関連する問題