2012-05-02 70 views
2

在Java中我想執行一個.lnk快捷方式,它自己執行一個.exe文件。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); 
    } 

我想WAITFOR()線程阻塞方法來等待,直到實際執行的應用程序(.exe文件)終止其繼續不快捷方式之前。有沒有辦法做到這一點,或者我必須以某種方式提取.lnk的.exe路徑?如果是這樣,我該怎麼做?

回答

1

Windows命令「開始」有一個選項/等待您必須指定要告訴他有等待進程結束。 此代碼運行,直到關閉記事本:

@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文件。

+0

謝謝你的工作! –

2

「開始」啓動一個單獨的過程,因此您的過程完成。但是你可以從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); 
} 
相關問題