【问题标题】:Force installer to fail when ports are not available?当端口不可用时强制安装程序失败?
【发布时间】:2012-07-17 13:47:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: install4j


    【解决方案1】:

    后来我发现了一个很好的替代方法:添加自定义代码操作:

    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

    【讨论】:

    • 为了获得更大的灵活性,您还可以直接在脚本中显示带有Util.showMessage(msg, JOptionPane.ERROR_MESSAGE); 的错误消息,而不是使用操作的失败策略。
    • 嗯,这给了我一个确定按钮,但行为是“忽略”
    • 您可以将该代码包装在一个循环中并使用Util.showOptionDialog(msg, new String[] {"Retry", "Quit}, JOptionPane.ERROR_MESSAGE),如果结果为1,则返回false。然后您可以将操作的失败策略设置为“失败时退出”。
    • 我最终需要一个不同的工作流程,所以我使用了表单的“验证表达式”——效果很好。很棒的产品,感谢您的所有帮助。
    【解决方案2】:

    所有只是收到一个错误对话框告诉的人

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

    我认为这也是亚当得到的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-18
      • 2015-10-09
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多