Установить имя процесса Java в Windows

Наше приложение Java Swing работает в Windows и завернуто в exe файл с помощью Launch4J.

Мы хотели бы настроить имя и описание нашего прикладного процесса (в диспетчере задач Windows), поскольку в настоящее время это "javaw.exe" и "Java Platform SE binary" (что запутывает для наших клиентов).

В то время как более старые версии Launch4J позволили изменить это с помощью <customProcName>, этот параметр теперь не функционирует, поскольку он больше не работает с Win7.

Есть ли какое-либо другое (простейшее) обходное решение для настройки имени и описания процесса приложения?

Например, изменение исполняемого имени файла javaw.exe похоже на подход (поскольку мы вставляем его в завернутый exe файл), но как же указать start4j, что имя файла jvm изменилось?

Другим вариантом может быть создание файла exe файла запуска: возможно, перебор?

Любые идеи/подсказки более чем приветствуются; спасибо!

Ответы

Ответ 1

Если вы хотите перевернуть свое собственное решение, вам захочется посмотреть на JNI и API вызовов, в частности JNI_CreateJavaVM(), который используется для создания виртуальной машины найдите основной метод GetStaticMethodID() и вызовите его с помощью CallStaticVoidMethod.

Это то, что делают java.exe, javaw.exe и множество других локальных пусковых установок. Вот некоторые примеры:

Если вы хотите не захотеть интегрировать собственную систему сборки с вашей системой сборки java, подход состоит в том, чтобы заранее создать статический launcher.exe и рассматривать его как статический двоичный код. Затем во время сборки java, измените бинарный blob с помощью java, чтобы обновить VERSIONINFO, значок и заставку. Пример такого подхода можно увидеть в IntelliJ LauncherGeneratorMain.java

Ответ 2

Если вы можете себе это позволить, JSmooth, похоже, делает то, что вам нужно. Это последний выпуск в 2007 году. Примечание о его лицензии, взятой из самого приложения:

Сгенерированный исполняемый файл (пусковые установки, созданные JSmooth) находится под LGPL с "исключением во время выполнения", аналогичным исключению лицензии gcc: не требуется, чтобы вы распространяли с ним исходный код, и что вы публикуете уведомление, упоминающее jsmooth.

При использовании JSmooth существует раздел с надписью "Скелет", который позволяет вам выбрать некоторые заранее определенные параметры. Одним из них является "Windowed Wrapper", который подходит для приложений GUI, описанных ниже:

Этот скелет обертывает графические приложения.

  • Не отображается консольный ввод-вывод
  • Если Java VM не найдена, она может отображать настраиваемый URL (обычно на странице загрузки java).

Аргументы могут быть переданы в приложение (либо использовать механизм аргументов JSmooth по умолчанию, либо создать ярлык с аргументами).

Важным в этом скелете является проверка опции "Запустить java-приложение в процессе exe", что приводит к запуску JVM в том же процессе, что и exe-обертка. Это означает, что в диспетчере задач Windows отображается только exe, в отличие от exe и java-процесса.

Альтернативой является создание собственной оболочки. См. этот справочник Oracle о том, как вызвать JVM из собственного приложения.

Ответ 3

Я сделал аналогичные вещи с WinRun4J, насколько я помню, он может использоваться коммерчески, потому что он лицензирован CPL. Проверено это сегодня: настройки имя процесса все еще работает (изначально это произошло на XP) с Windows 7.

В соответствии с веб-сайтом вы просто создаете ini файл, который сообщает WinRun4J, что запускать:

main.class=org.something.MyMainClass
classpath.1=*.jar

(есть еще много параметров, вы можете установить, где JRE можно найти и многое другое)

На втором шаге вы копируете winrun4j.exe на что-то, что подходит вашему приложению:

copy winrun4j.exe yourapplication.exe

(Существует версия для Windows x64 тоже)

Затем у вас есть RCEDIT (поставляется с WinRun4j), добавьте ini в exe:

rcedit /N yourapplication.exe yourapplication.ini

Ответ 4

Это кажется довольно старым и не стоит усилий, но это может быть и то, что вы ищете: Java exe Maker.