8

技術に詳しくないさまざまなエンド ユーザーに配布する必要がある、動作中の JNLP アプリケーションがあります。

ユーザーのマシンに最近の JVM がインストールされている場合は、すべて問題ありません。私が送信した JNLP ファイルをダブルクリックするだけで、後は Java Web Start が行います。

ここで、JVM の有無にかかわらず動作するものを配布したいと考えています。たとえば、.exe互換性のある JVM が存在しない場合に自動ダウンロードし、呼び出しjavaws.exeて .jar ファイルをダウンロードし、アプリケーションを起動するファイルなどです。

Launch4J は私が見つけた中で最も近いものですが、 を介してプログラムを起動することはできませんjavaws.exe。唯一のオプションはjavajavaw

次のことができる製品を希望します。

  • .exeJVM の事前インストールを必要としない自己完結型のファイルを生成する
  • ファイルを解析し、.jnlp必要に応じてダウンロードする正しい JVM を決定します (Java Web Start が必要に応じて JVM をダウンロードできることは知っていますが、1 つ目は Java Web Start をブートストラップするため、2 つ目はアプリケーションを実行するためのものです)。特定の異なる JVM が必要になる場合があります。)
  • ユーザーを Java ダウンロード ページに誘導したり、新しいインストール ウィザードを開いたりするだけでなく、JVM を自動的にダウンロードしてインストールします。
  • 必要に応じて管理者パスワードの入力を求めます (JVM をインストールするためのアクセス許可です。これは Sun JVM インストーラーに組み込まれているとは思いません)。
  • セキュリティ ダイアログを 1 つだけ表示します (生成されたファイルを信頼することを確認するためにユーザーに 1 回だけプロンプトを表示したいのですが、同じソースから取得され、同じ証明書で署名され.exeたファイルを信頼することを確認するための 2 回目のプロンプトは望んでいません)。.jar.) これには、自動ダウンローダーが JWS を起動する前に証明書をインストールする必要があると思います.)
  • (必須ではありません) .jarJVM と同時にバックグラウンドでアプリケーション リソース (ファイルなど) をダウンロードします。これには、JVM をインストールする前にキャッシュを実行する必要があるため、キャッシュをネイティブ コードで実装し、DownloadService後で JNI を使用してキャッシュに接続する必要があります。

このような製品は存在しますか?そうではないと思いますが、試してみる価値はあります。


更新いくつかの関連する問題の解決策が記載されているこの記事を見つけましたが、これはオフライン インストール用に設計されており、主にオンライン インストールに関心があります。

4

6 に答える 6

4

I have been able to do this & use it in production.

write a simple bootstrap class, jar it, and Launch4j the jar.

here's the main for the simple bootstrap class:

public static void main(String[] args) {
  try {     
    final File jnlp = File.createTempFile("temp", ".jnlp");
    final URL url = new URL("http://yourjnlp-wherever-youre-hostingit.jnlp");
    yourCopyStreamMethodYouWrote(url.openStream(),new FileOutputStream(jnlp));
    Desktop.getDesktop().open(jnlp);
  } catch (final Throwable t) { 
     // do something useful here
  }
}
于 2012-01-04T00:01:55.960 に答える
2

私は同じ問題に遭遇しました。最終的には、BAT、シェル、そして最終的には Mac 用の DMG になりました。

Nullsoftインストーラーを使用したWindows用の自動JREインストールに関するこのコメントを見つけました:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

JNLP 以外では、すべてのプラットフォームを自動化するのは難しいと思います。しかし、私のプロジェクトでは、2 年間、ユーザーが自分で Java を入手しなければならないという苦情は見たことがありません。私は、ほとんどのマシンがすでにそれを持っていると信じています。Windows ユーザーは、ショートカットがないことに不満を持っていましたが、vbs を使用すると簡単に実行できます。

また、Mac DMG AppBundle では、JRE を指定する方法があります。古い PowerPC ベースのマシンでない限り、Mac には最新バージョンがあります。その場合、Java6 はありません。

複数のランチャーを使用することになる場合は、自動更新戦略をお勧めします。

于 2010-08-11T11:58:41.697 に答える
2

プロジェクトを Excelsior JET でコンパイルすることも検討できます。他のすべてとは別に、妥当なサイズの自給自足のディストリビューションも作成します。

于 2010-08-11T14:21:39.113 に答える
0

別のアプローチとして、SunJREを.BATファイルとともに配布して/Sスイッチで呼び出すこともできます。これにより、サイレントインストールが発生します。

javawsの呼び出しと組み合わせた完全にサイレントなJavaインストールを可能にするものは他に見たことがありません。

于 2010-07-31T23:41:57.183 に答える
0

あなたがやろうとしていることはわかりましたが、javaws を使用したくないのはなぜですか? Launch4J は、jar ファイルをシームレスに使用できるため、Java をインストールする代わりに適切なオプションのように見えます。

javaws は多かれ少なかれ、セキュリティ許可といくつかの起動オプションを備えた java.exe を使用します。ただし、ユーザーが信頼する証明書を使用する場合は、セキュリティ アクセス許可を無効にすることができます。

また、javaws がいつ導入されたのかはわかりませんが、EOL に近い Java 1.5 で利用可能であったことは確かです。したがって、ユーザーが何年もJavaをインストールしていない限り、jnlpを起動させることが問題になるとは思えません。古いバージョンを実行している場合でも、必要なバージョンの Java を jnlp に追加できます。これは、そのアプリケーションに対してのみ自動的にダウンロードされます。

于 2010-08-11T04:24:10.527 に答える