2010-07-31 2 views
8

У меня есть рабочее приложение JNLP, которое мне нужно распространять среди различных нетехнических конечных пользователей.Комбинация Launch4J и Java Web Start?

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

Теперь я хотел бы распространять что-то, что работает с JVM или без него, например. a .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.

Есть ли такой продукт? Я подозреваю, что это не так, но это стоит того.


Update Я нашел this article, который имеет решение некоторых проблемы, связанные, хотя он предназначен для автономной установки и я, в основном связан с онлайн установками.

ответ

2

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

Я нашел этот комментарий automaded установки 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

Я не очень беспокоюсь о не-windows-платформах. У Mac всегда установлен JVM, и я предполагаю, что большинство пользователей Linux имеют технические знания, чтобы найти и дважды щелкнуть файл '.jar', если это необходимо. – finnw

0

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

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

0

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

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

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

+0

I * do * хочет использовать javaws. Проблемным случаем является ПК, на котором никогда не было установленной Java. – finnw

+0

javaws работает только в том случае, если Java уже установлена. –

2

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

3

Я был в состоянии сделать это & использовать его в производстве.

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

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

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 
    } 
} 
+0

Этот звук, как правильный способ сделать это. launch4j гарантирует наличие JVM (я не знаю, можно ли его автоматически установить или перенести с ним) и вызывает код. Затем код просто сообщает браузеру запустить сценарий JNLP. –

+0

Это умно, но разве вы не получаете два экрана nag («nags» безопасности, «вы хотите запустить») как для этого класса, так и для вашего приложения Java Web Start? – Joel

0

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

В качестве примера используется Java-based Integrated Genome Browser, который распространяется вместе с установщиком, сгенерированным этим инструментом. См. Его install4j configuration file.