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

Требования

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

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

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

Проблемы:

Не поддерживает большие шрифты. Вместо этого окно приложения масштабируется в пикселях (как в Google Chrome).Два разных EXE-файла должны использоваться в зависимости от установленного JRE. Поэтому, когда установлена 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.

Ответы на вопрос(5)

Ваш ответ на вопрос