Как лучше всего запускать приложения Java в Windows 7?

Требования

Я хочу опубликовать приложение Java GUI в Windows 7. Это приложение использует Swing Toolkit и не требует никакого собственного кода. Приложение устанавливается с помощью установщика NSIS . Я хочу как можно лучше интегрировать это приложение в Windows 7. Это означает:

  • Когда приложение работает, должна быть возможность закрепить его на панели задач.
  • Должна быть возможность связать файлы данных с приложением, чтобы Windows открывала эти файлы с моим приложением.
  • Должен автоматически работать с 32-разрядной средой выполнения Java и с 64-разрядной средой выполнения Java. Поэтому, когда пользователь удаляет 32-битную Java и устанавливает вместо нее 64-битную (или наоборот), мое приложение все равно должно работать.
  • Должен поддерживать настройку больших шрифтов Windows. Я не очень понимаю эту особенность. Я просто знаю, что некоторые приложения полностью игнорируют его, другие (например, Google Chrome) масштабируются по пикселям (выглядит действительно некрасиво), а другие поддерживают его, просто используя большие шрифты по назначению (это то, что я хочу, и обычно это работает. Только решение WinRun4J упомянутое ниже не работает с этим).

Протестированные решения

WinRun4J

WinRun4j - EXE-файл, запускающий приложение Java.Поскольку приложение не является ответвлением нового Java-процесса, Windows считает EXE-файл приложением. Так что с панелью задач проблем нет. Ассоциации файлов работают, потому что файлы могут быть просто связаны с файлом EXE.

Проблемы:

  • Не поддерживает крупные шрифты. Вместо этого окно приложения масштабируется по пикселям (как Google Chrome).
  • В зависимости от установленной JRE должны использоваться два разных EXE-файла. Поэтому, когда установлена ​​64-битная JRE, приложение должно запускаться с 64-битным EXE-файлом. Если установлен 32-битный JRE-файл, необходимо использовать другой EXE-файл. Это неудобно для пользователя, потому что пользователь не понимает, почему он должен использовать 32-битный EXE в 64-битной операционной системе, когда установлена ​​только 32-битная JRE.

Launch4J

Launch4J создает 32-битный EXE, который запускает внешний процесс Java для запуска приложения Java. Поэтому, в отличие от WinRun4J, он также может запускать 64-битную Java.

Проблемы:

  • Не удается закрепить приложение на панели задач.
  • System.out.println не будет печатать на консоли, если headerType = "gui" , независимо от того, запускается ли приложение с консоли.

JAR

В Windows вы можете просто дважды щелкнуть файл JAR, чтобы запустить приложение. Установленная JRE не имеет значения, просто работает. Но ...

Проблемы:

  • Приложение не может быть закреплено на панели задач.
  • Невозможно создать ярлык в меню «Пуск».
  • Невозможно связать файлы с файлом JAR.

BAT / CMD

Простой командный файл, подобный этому, может использоваться для запуска приложения:

@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1

Для этого командного файла можно создать ярлык, чтобы установить собственный значок.

Проблемы:

  • Окно DOS выскакивает при запуске приложения.
  • Пакетный файл не знает, где находится javaw.exe. В зависимости от того, какая версия java (32- или 64-разрядная) установлена, она может находиться в c: \ windows \ syswow64 , и Windows не перенаправляет этот вызов из пакетных файлов автоматически. Использование переменной среды JAVA_HOME также недопустимо, поскольку Java не устанавливает ее автоматически.
  • При связывании файлов с пакетным файлом нельзя установить пользовательский значок.
  • Поддержка панели задач не работает должным образом. Приложение может быть прикреплено к нему, когда командный файл запускается вручную, но если вместо этого дважды щелкнуть связанный файл, он не работает.

Ярлык

Вместо использования командного файла можно только создать ярлык для запуска приложения. Он связан с этой командой: c: \ windows \ system32 \ javaw.exe -jar "c: \ program files \ myapp \ myapp.jar" . Windows автоматически перенаправляет этот вызов в каталог SysWOW64, если установлена ​​32-разрядная Java JRE.

Проблемы:

  • Невозможно связать файлы с ним, потому что Windows принимает только файлы EXE / COM / PIF / BAT / CMD в качестве целей связывания. Файлы LNK не работают.

Вопрос

Есть ли другое решение, которое удовлетворяет всем требованиям сверху? Или есть какие-то уловки для решения проблем с упомянутыми решениями?

Решение

После решения проблемы закрепления панели задач с помощью Launch4j кажется лучшим решением.Launch4j может быть легко интегрирован в проект Maven (с этим или этим плагином), настройка довольно проста, и все работает из коробки, кроме закрепления панели задач. Для закрепления панели задач приложение Java должно установить appModelUserId, как описано в ответе на этот вопрос .

Кроме того, приложение Java должно быть установлено установщиком, который должен установить хотя бы один ярлык, указывающий на EXE. Этот ярлык также должен содержать appModelUserId. В NSIS это можно сделать с помощью подключаемого модуля WinShell и такой конфигурации:

CreateShortCut "$SMPROGRAMS\MyApp.lnk" \
    "$INSTDIR\myapp.exe" "" "$INSTDIR\myapp.exe" 0 SW_SHOWNORMAL
WinShell::SetLnkAUMI "$SMPrograms\MyApp.lnk" "MyAppModelUserId"

По неизвестной причине этот ярлык должен существовать только. Вам не обязательно его использовать. Вы можете дважды щелкнуть EXE, и закрепление панели задач по-прежнему работает. Вы даже можете создать ярлык в какой-либо подпапке папки вашего приложения. Прикрепление панели задач перестает работать, когда удаляется последний ярлык EXE-файла.

36
задан Community 23 May 2017 в 11:45
поделиться