Я хочу опубликовать приложение Java GUI в Windows 7. Это приложение использует Swing Toolkit и не требует никакого собственного кода. Приложение устанавливается с помощью установщика NSIS . Я хочу как можно лучше интегрировать это приложение в Windows 7. Это означает:
WinRun4j - EXE-файл, запускающий приложение Java.Поскольку приложение не является ответвлением нового Java-процесса, Windows считает EXE-файл приложением. Так что с панелью задач проблем нет. Ассоциации файлов работают, потому что файлы могут быть просто связаны с файлом EXE.
Проблемы:
Launch4J создает 32-битный EXE, который запускает внешний процесс Java для запуска приложения Java. Поэтому, в отличие от WinRun4J, он также может запускать 64-битную Java.
Проблемы:
System.out.println
не будет печатать на консоли, если headerType = "gui"
, независимо от того, запускается ли приложение с консоли. В Windows вы можете просто дважды щелкнуть файл JAR, чтобы запустить приложение. Установленная JRE не имеет значения, просто работает. Но ...
Проблемы:
Простой командный файл, подобный этому, может использоваться для запуска приложения:
@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
Для этого командного файла можно создать ярлык, чтобы установить собственный значок.
Проблемы:
c: \ windows \ syswow64
, и Windows не перенаправляет этот вызов из пакетных файлов автоматически. Использование переменной среды JAVA_HOME
также недопустимо, поскольку Java не устанавливает ее автоматически. Вместо использования командного файла можно только создать ярлык для запуска приложения. Он связан с этой командой: c: \ windows \ system32 \ javaw.exe -jar "c: \ program files \ myapp \ myapp.jar"
. Windows автоматически перенаправляет этот вызов в каталог SysWOW64, если установлена 32-разрядная Java JRE.
Проблемы:
Есть ли другое решение, которое удовлетворяет всем требованиям сверху? Или есть какие-то уловки для решения проблем с упомянутыми решениями?
После решения проблемы закрепления панели задач с помощью 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-файла.