2012-07-18 29 views
3

我正在使用install4j來安裝需要HTTP和HTTPS端口的Intranet應用程序。我想測試這些端口是否可用,並警告用戶/阻止安裝,直到他們選擇不可用的端口。當端口不可用時強制安裝程序失敗?

我看到的唯一途徑(除了自定義代碼)是爲了確保Windows服務在應用程序無法綁定到所需端口時失敗,並使用失敗策略「詢問用戶是否重試或退出失敗」。在Web服務器啓動代碼中,如果服務器無法綁定到端口,則使用System.exit(1)。但是,這看起來並沒有註冊爲安裝程序的失敗 - 安裝過程沒有調用失敗策略。

什麼是正確的方法,信號失敗的「開始服務」行動?讓其他人採取替代方法來保證安裝使用可用端口?

回答

3

一個好的替代方法,因爲發現我有:添加自定義代碼操作:

List<Integer> takenPorts = new ArrayList<Integer>(); 
for (int port : Arrays.asList(80, 443)) { 
    java.net.ServerSocket socket = null; 
    try { 
     socket = new java.net.ServerSocket(port); 
    } catch (IOException e) { 
     takenPorts.add(port); 
    } finally { 
     if (socket != null) socket.close(); 
    } 
} 

if (takenPorts.isEmpty()) { 
    return true; 
} 
else { 
    String msg; 
    if (takenPorts.size() == 2) { 
     msg = "Ports 80 and 443 must be available for uDiscovery"; 
    } 
    else { 
     msg = "Port " + takenPorts.get(0) + " must be available for uDiscovery"; 
    } 
    context.setVariable("portErrorMessage", msg); 
    return false; 
} 

如何這樣組裝起來here

+1

爲了獲得更大的靈活性,您還可以直接在腳本中使用Util.showMessage(msg,JOptionPane.ERROR_MESSAGE);來顯示錯誤消息,而不是使用操作的失敗策略。 – 2012-07-19 07:58:37

+0

嗯,這給了我一個確定的按鈕,但與「忽略」的行爲 – 2012-07-19 14:16:51

+1

你可以包裝代碼在循環中,並使用'Util.showOptionDialog(味精,新字符串[] {「重試」,「退出}, JOptionPane.ERROR_MESSAGE)',如果結果爲1,則返回'false',然後將行爲的失敗策略設置爲「Quit on failure」 – 2012-07-19 16:05:16

0

所有誰是剛剛得到一個錯誤對話框,告訴

很好的解釋

「com.install4j.runtime.beans.action.control.RunScriptAction失敗」

我認爲這也是一個,亞當得到了:

變量上述srciptlet命名portErrorMessage設置。

我也沒有意識到這一點。技巧很簡單:您必須在「錯誤消息」字段中插入${installer:portErrorMessage}。這樣做,您不需要Ingo描述的Util.showOptionDialog,因爲該方法調用會打開另一個必須先被確認的另一個對話框,之後用戶必須從install4j確認對話框。

相關問題