3

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

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

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

4

2 回答 2

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;
}

很好地解释了如何在这里连接它

于 2012-07-18T16:32:27.470 回答
0

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

“com.install4j.runtime.beans.action.control.RunScriptAction 失败”

我认为这也是一个,亚当得到:

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

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

于 2015-10-05T15:52:37.437 回答