Установить имя процесса 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.