Комбинация Launch4J и Java Web Start? - PullRequest
       42

Комбинация Launch4J и Java Web Start?

8 голосов
/ 01 августа 2010

У меня есть работающее приложение JNLP, которое мне нужно распространить среди различных нетехнических конечных пользователей.

Если на компьютере пользователя установлена ​​последняя версия JVM, все в порядке.Они просто дважды щелкают файл JNLP, который я им отправляю, а Java Web Start делает все остальное.

Теперь я хотел бы распространять что-то, что работает с JVM или без него, например, файл .exe, который загружается автоматическисовместимая JVM, если ее нет, вызывает javaws.exe для загрузки файлов .jar и запуска приложения.

Launch4J - самое близкое совпадение, которое я нашел, но не может запустить программу через javaws.exe.Единственные опции: java и javaw

Мне нужен продукт, который может:

  • Создать автономный файл .exe, для которого не требуется JVM длябыть предустановленным
  • Разобрать файл .jnlp и определить правильную JVM для загрузки при необходимости (я знаю, что Java Web Start может загрузить JVM при необходимости, но я хочу избежать загрузки двух, первыйдля загрузки Java Web Start и второго для запуска приложения, для которого может потребоваться определенная, но другая JVM.)
  • Загрузите и установите JVM автоматически, не просто направляют пользователя к загрузке Javaоткройте страницу или откройте новый мастер установки.
  • При необходимости запросите пароль администратора (для разрешения установки JVM. Не думаю, что он встроен в установщики Sun JVM.)
  • Показать только одно диалоговое окно безопасности (я хотел бы предложить пользователю только один раз, чтобы подтвердить, что он доверяет сгенерированному .exe, но я не хочу, чтобы второе приглашение подтвердило, что он доверяет .jar файл, который будет из того же источника и подписан тем же сертификатом.) Я предполагаю, что для этого потребуется автозагрузчик установить сертификат перед запуском JWS.)
  • (необязательно) Скачать ресурсы приложения (например, .jar файлы) в фоновом режиме одновременно с JVM.Для этого потребуется, чтобы кэш работал до установки JVM, поэтому кэш должен быть реализован в собственном коде, а DownloadService позднее будет взаимодействовать с ним с помощью JNI.

Имеет ли продукткак это существует?Я подозреваю, что это не так, но это стоит того.


Обновление Я нашел эту статью , в которой есть решения некоторых связанных проблем, хотя она предназначена дляавтономная установка, и я в основном занимаюсь онлайн-установкой.

Ответы [ 6 ]

4 голосов
/ 04 января 2012

Я смог сделать это и использовать его в производстве.

написать простой класс начальной загрузки, выполнить jar it и Launch4j jar.

вот главное для простого класса начальной загрузки:

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
  }
}
2 голосов
/ 11 августа 2010

Вы также можете рассмотреть возможность компиляции вашего проекта с помощью Excelsior JET. Помимо всего прочего он также создает самодостаточное распределение разумных размеров.

2 голосов
/ 11 августа 2010

Я столкнулся с той же проблемой. В итоге я получил BAT, Shell и, возможно, DMG для Mac.

Я нашел этот комментарий об автоматической установке JRE для Windows с помощью установщика Nullsoft:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

Я думаю, что за пределами JNLP вам будет сложно установить автоматизацию для всех платформ. Однако в моем проекте в течение двух лет я не видел жалоб на то, что пользователям приходится получать java самостоятельно. Я верю, что у большинства машин это уже будет. Пользователь Windows жаловался на отсутствие ярлыка, но это легко сделать с помощью VBS.

Также в Mac DMG AppBundle есть способ указать JRE. Mac будет иметь последнюю версию, если только они не являются более старыми компьютерами на базе PowerPC. В этом случае нет Java6.

Из вас получилось несколько лаунчеров, я бы порекомендовал автоматическое обновление стратегии.

0 голосов
/ 12 ноября 2015

Хотя это не бесплатно для некоммерческого использования, Install4j предлагает встроенную систему установки для приложений Java.JRE связывание поддерживается.Я не уверен, что он может автоматически анализировать JNLP, но, возможно, стоит кое-что проверить.

В качестве примера использования интегрированный браузер Genome на основе Java распространяется с помощью программы установки, созданной этим инструментом.Смотрите его файл конфигурации install4j .

0 голосов
/ 11 августа 2010

Хорошо, я понимаю, что вы пытаетесь сделать, но почему вы не хотите использовать javaws? Launch4J выглядит как хороший вариант в качестве альтернативы установленному java, поскольку он позволяет беспрепятственно использовать файл jar.

javaws более или менее использует java.exe с разрешениями безопасности и некоторыми опциями запуска. Но разрешения безопасности могут быть отключены, если вы используете сертификат, которому доверяет пользователь.

Также я не уверен, когда javaws был введен, но я уверен, что он был доступен в java 1.5, которая рядом с EOL. Так что, если у вашего пользователя не было Java, установленного много лет, я сомневаюсь, что заставить его запустить jnlp будет проблемой. Даже если они используют более старую версию, вы можете добавить требуемую версию Java в jnlp, и она будет автоматически загружена только для этого приложения.

0 голосов
/ 01 августа 2010

Другим подходом может быть также распространение Sun JRE с .BAT-файлом, вызывая его с ключом / S, что вызывает автоматическую установку.

Я не видел ничего другого, позволяющего полностью тихую установку Java в сочетании с вызовом javaws.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...