当端口不可用时强制安装程序失败?

时间:2012-07-18 13:43:39

标签: install4j

我使用install4j安装需要HTTP和HTTPS端口的Intranet应用程序。我想测试这些端口是否可用,并警告用户/阻止安装,直到他们选择不可用的端口。

我看到的唯一途径(除了自定义代码)是确保如果应用程序无法绑定到所需端口,Windows服务失败,并使用失败策略“询问用户是否重试或退出失败”。在Web服务器启动代码中,如果服务器无法绑定到端口,则使用System.exit(1)。但是,这似乎并未注册为安装程序失败 - 安装过程中不会调用失败策略。

对“启动服务”操作发出信号失败的正确方法是什么?让其他人采取替代方法来保证安装使用可用端口吗?

2 个答案:

答案 0 :(得分: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 :(得分:0)

所有刚刚收到错误对话框的人

  

&#34; com.install4j.runtime.beans.action.control.RunScriptAction失败&#34;

我认为那也是那个,亚当得到了:

在上面的srciptlet中,设置了名为 portErrorMessage 变量

我还没有意识到这一点。诀窍很简单:您必须在字段中插入${installer:portErrorMessage} &#34;错误消息&#34; 。这样做,你不需要Ingo描述的Util.showOptionDialog,因为该方法调用打开另一个必须首先确认的第二个对话框,之后用户必须从install4j确认对话框。