Замена значка в Windows * .exe из независимого от платформы Java-кода с открытым исходным кодом - PullRequest
9 голосов
/ 28 декабря 2011

Прежде всего, это не дублирует очень распространенный вопрос создания EXE из классов Java.Мне не нужно этого делать.

Для решения NetBeans RFE # 64612 без шагов вручную Мне нужна библиотека Java (6+), которая может занять существующий Windows *.exe файл и замените его значок заменой в общем формате.Исполняемый файл, который является универсальным и предварительно собранным (распространяется в двоичной форме), уже знает, как загрузить файл конфигурации для конкретного приложения, а затем запустить JRE с различными JAR-файлами приложений и т. Д .;единственная проблема состоит в том, что у него есть общий значок, и я хотел бы заменить этот значок как часть чистой сборки Java значком для приложения, чтобы он выглядел красивее.

Библиотека должна быть доступна вневирусная лицензия с открытым исходным кодом;кроссплатформенный (должен работать в Windows, Linux, Mac, Solaris), поэтому не может быть запущен какой-то вспомогательный инструмент для конкретной ОС;и должен принимать ввод PNG, хотя EXE должен работать на XP, поэтому в соответствии с Википедией должен включать формат BMP.На высоком уровне, если предположить, что Ant - инструмент сборки, мне бы хотелось что-то вроде этого:

<replaceicon from="app.exe" to="hello.exe" icon="hello.png"/>

Кто-нибудь знает, существует ли инструмент, соответствующий этим спецификациям?Из различных поисков в Интернете я обнаружил Launch4J , но, похоже, это просто разветвление windres для реальной работы, таким образом, нетривиально переносимое.Я нашел JSmooth , который выглядит более многообещающе - кажется, включает в себя Java-код для обработки кодека ICO и манипулирования PE-файлами - но это GPL. WinRun4J , похоже, использует собственный код для манипуляции с иконками, хотя мне было трудно следить за его исходниками. Jimi предположительно обрабатывает формат ICO (в этом отношении, похоже, стандарт javax.imageio также кажется), но я думаю, что не имеет средств для обновления ресурсов PE.

Ответы [ 4 ]

2 голосов
/ 18 февраля 2014

Есть проект PE / COFF 4J , который, кажется, может делать то, что вы хотите. Лицензия распространяется на Общедоступную лицензию (CPL) .

Некоторые примечания по этому поводу:

  • Автор, похоже, такой же, как и для WinRunJ . В этом проекте фактически есть редактор ресурсов PE, который называется RCEDIT.exe, но он использует собственные вызовы Windows, как вы сами указали. Почему автор не использовал свой собственный проект (PE / COFF 4J) для достижения этой цели, меня не устраивает. Меня беспокоит, что, возможно, проект PE / COFF 4J будет заброшен.

  • На странице документации для PE / COFF 4J упоминается только о том, что проект способен анализировать PE-файл, но, как я могу сказать, файл можно проанализировать, затем что-то изменить (например, ресурс значка) и затем написать изображение обратно на диск.

Как и вы, я также искал чистое Java-решение, которое могло бы манипулировать ресурсами в .EXE (PE-файл) и появилось с пустыми руками. На данный момент это лучшая ставка.

Замена ресурса значков в файле .EXE довольно проста при использовании собственных вызовов Win32. Делая это из чистой Java, вы должны быть чертовски уверены, что PE-файл согласован, когда вы записываете его обратно на диск. Я не рассматривал формат файла PE подробно, но полагаю, что при замене / добавлении ресурса изменится множество ссылок, а не только ссылки, связанные с ресурсом, который вы заменяете / добавляете.

2 голосов
/ 28 декабря 2011

Согласно моему конструктору продуктов Eclipse Rich Client Platform,

  • Linux требует значок XPM
  • MacOSX требует файл ICNS
  • Для Solaris требуются значки в 4 часа дня: большие, средние, маленькие и маленькие
  • Windows (32-разрядная версия) требует 6 отдельных образов BMP или файл ICO.

Ваш дистрибутив должен содержать все эти файлы, чтобы не зависеть от платформы.

Я не работал с другими платформами, но в Windows вы можете изменить значок программы, щелкнув правой кнопкой мыши существующий значок и щелкнув левой кнопкой мыши на Свойства. Щелкните левой кнопкой мыши на вкладке «Ярлык» и щелкните левой кнопкой мыши кнопку «Изменить значок». Перейдите в каталог дистрибутива и выберите файл ICO.

Я уверен, что можно автоматизировать изменение значка Windows при доставке дистрибутива. Я думаю, что это возможно на других платформах.

1 голос
/ 02 июля 2014

Похоже, что проект eclipse написал небольшое Java-приложение для замены иконок.

IconExe из проекта Eclipse

Кажется, что app.exe и app64.exe в Netbeans имеют следующие значки в разделе ресурсов:
48 х 48 32 бит
32 х 31 32 бит
48 х 48 8 бит
31 х 31 8 бит
16 х 16 8 бит

Я предполагаю, что 32 х 31 - ошибка

0 голосов
/ 28 декабря 2011

Вы просто должны заменить первый ICO или BMP в разделе ресурсов исполняемых файлов. Этот значок автоматически выбирается проводником в качестве значка для отображения.

...