3

install4jを使用して、HTTPおよびHTTPSポートを必要とするイントラネットアプリケーションをインストールしています。これらのポートが使用可能であることをテストし、使用できないポートを選択するまでユーザーに警告/インストールをブロックしたいと思います。

これについて私が見る唯一の方法は(カスタムコードを除いて)、アプリケーションが必要なポートにバインドできない場合に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が失敗しました」

私はそれも1つだったと思います、アダムは得ました:

上記のsrciptletで、portErrorMessageという名前の変数が設定されました。

私も最初は気づいていませんでした。トリックは非常に簡単です。 ${installer:portErrorMessage} 「エラーメッセージ」フィールドに挿入する必要があります。そうすることで、Util.showOptionDialogIngoによる説明は必要ありません。そのメソッド呼び出しは、最初に確認する必要がある別の2番目のダイアログを開き、その後、ユーザーもinstall4jからダイアログを確認する必要があるためです。

于 2015-10-05T15:52:37.437 に答える