我使用install4j安装需要HTTP和HTTPS端口的Intranet应用程序。我想测试这些端口是否可用,并警告用户/阻止安装,直到他们选择不可用的端口。
我看到的唯一途径(除了自定义代码)是确保如果应用程序无法绑定到所需端口,Windows服务失败,并使用失败策略“询问用户是否重试或退出失败”。在Web服务器启动代码中,如果服务器无法绑定到端口,则使用System.exit(1)。但是,这似乎并未注册为安装程序失败 - 安装过程中不会调用失败策略。
对“启动服务”操作发出信号失败的正确方法是什么?让其他人采取替代方法来保证安装使用可用端口吗?
答案 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确认对话框。