9
votes

Remplacement de l'icône dans Windows * .exe à partir du code Java indépendant de la plate-forme Open-Source

Tout d'abord, il ne s'agit pas d'un duplicata de la question très commune de faire une exe des classes Java. Je n'ai pas besoin de faire ça.

Pour résoudre NetBeans RFE # 64612 sans Étapes manuelles J'ai besoin d'une bibliothèque Java (6+) qui peut prendre un Windows * .exe fichier et remplacez son icône avec un substitut dans un format commun. L'exécutable, qui est générique et précieux (distribué sous forme binaire) sait déjà comment charger un fichier de configuration spécifique à une application, puis commencer la jre avec divers pots d'application, etc. Le seul problème est qu'il a une icône générique et je voudrais remplacer cette icône dans le cadre d'une version pure Java avec une icône spécifique à l'application, il semble donc plus jolie.

La bibliothèque doit être disponible sous une licence ouverte non écoutée; Plate-forme inter-plate-forme (doit être exécutée sur Windows, Linux, Mac, Solaris), ne peut donc pas forcer un outil d'assistance spécifique à un système d'exploitation; et doit accepter l'entrée PNG, bien que l'EXE doit fonctionner sur XP de sorte de Selon Wikipedia devrait incorporer le format BMP. À un niveau élevé, supposant une fourmi comme un outil de construction, je voudrais quelque chose comme ceci:

Est-ce que quelqu'un sait si un outil correspondant à ces spécifications existe déjà? De diverses recherches sur web j'ai trouvé Launk4J , mais cela ne semble que Fork WINDRES Pour le travail réel, donc pas trivialement portable. J'ai trouvé JSMooth qui semble plus prometteur - semble inclure le code Java pour gérer le codec ICO et manipuler des fichiers PE - mais C'est gpl. WinRun4J cherche à utiliser le code natif pour la manipulation des icônes, bien que j'ai eu du mal à suivre ses sources. JIMI gère soi-disant le format ICO (à ce sujet la norme javax.imageio semble aussi bien) mais je suppose qu'il n'a aucune installation pour la mise à jour des ressources PE.


2 commentaires

Question connexe: Stackoverflow.com/questions/1614772/Cow- à changer-jframe-ico n


Une question liée pointe sur java.net/projects/pe-file-reader mais cette est gpl et semble lire uniquement, pas écrire des fichiers PE.


5 Réponses :


2
votes

Selon la plate-forme client riche en Eclipse,

  • Linux nécessite une icône XPM
  • MacOSX nécessite un fichier ICNS
  • Solaris nécessite 16 heures d'icônes, grandes, moyennes, petites et minuscules
  • Windows (32 bits) nécessite 6 images BMP distinctes ou un fichier ICO.

    Votre package de distribution devra contenir tous ces fichiers pour être indépendants de la plate-forme.

    Je n'ai pas travaillé avec les autres plates-formes, mais sur Windows, vous pouvez modifier l'icône du programme en cliquant avec le bouton droit de la souris sur l'icône existante et en cliquant sur les propriétés. Cliquez à gauche sur l'onglet Raccourci et cliquez à gauche sur le bouton Modifier l'icône. Naviguez vers le répertoire de distribution et sélectionnez le fichier ICO.

    Je suis sûr qu'il est possible d'automatiser le changement d'icône Windows lorsque vous livrez le package de distribution. J'imagine que c'est possible sur les autres plates-formes.


1 commentaires

Informations de base intéressantes, mais pas une réponse à ma question.



0
votes

Vous devez simplement remplacer le premier ICO ou BMP dans la section Ressources Executables. Celui-là est automatiquement cueilli par explorateur comme l'icône à afficher.


1 commentaires

À droite, le remplacement de l'icône dans la section Ressources Executables est ce que je veux accomplir. Mais la question était de savoir comment faire cela, concrètement, d'une construction basée sur Java éventuellement en cours d'exécution sur un autre système d'exploitation (éventuellement sur un serveur CI).



2
votes

Il y a le projet PE / COF 4J qui semble pouvoir faire ce que vous voulez. Il est sous licence sous le Licence publique commune (CPL) .

Certaines notes à ce sujet:

  • L'auteur semble être identique à celui de WinRunj . Ce projet dispose d'un éditeur de ressources PE, appelé RCEDIT.EXE , mais il utilise des appels de Windows natifs lorsque vous signalez vous-même. Pourquoi l'auteur n'a pas utilisé son propre projet (PE / COFF 4J) pour que cela me batte. Cela me donne une inquiétude que le projet PE / COF 4J est peut-être abandonné.

  • La page de documentation de PE / COFC 4J mentionne uniquement que le projet est capable d'analyser un fichier PE mais comme le fichier que possible, vous pouvez analyser, puis modifier quelque chose (par exemple une ressource d'icône), puis écrivez le Image Retour sur disque.

    Comme vous, j'ai également cherché une solution Java pure qui pourrait manipuler des ressources dans un fichier .exe (fichier PE) et avoir vint les mains vides. C'est le meilleur pari jusqu'à présent.

    Remplacement d'une ressource d'icône dans un fichier .exe est plutôt simple lorsque vous utilisez les appels Win32 natifs. Lorsque vous le faites de pure Java, vous devez vous assurer que le fichier PE est cohérent lorsque vous l'écrivez sur le disque. Je n'ai pas scruté le format de fichier PE en profondeur mais je suppose que de nombreuses références changeront lors du remplacement / de l'ajout d'une ressource, pas seulement celle liée à la ressource que vous remplacez / ajoute.


1 commentaires

Merci. Ne travaillez plus sur Netbeans, mais j'ai mentionné ce projet dans les RFE NetBeans. (Ne pas accepter cette réponse encore parce que je n'ai pas vérifié que cela fonctionne vraiment à cette fin.)



1
votes

On dirait que le projet Eclipse a écrit une petite application Java pour remplacer les icônes.

iconexe du projet Eclipse

L'App.exe et l'App64.exe dans Netbeans semblent avoir les icônes suivantes dans la section de ressources:
48 x 48 32 bits de
32 x 31 32bit de
48 x 48 8 bits de

Je suppose que le 32 x 31 est une erreur


1 commentaires

Probablement un bon point de départ, bien que cela prend une entrée ICO, vous deviez d'abord convertir une entrée PNG en quelque sorte.



2
votes

Ceci est très longtemps attendu, mais nous venons de publier un plugin maven à source ouverte qui peut faire cela puisque nous avions le même problème.

Disclaimer: je suis l'auteur de ce projet

La documentation pour cela est disponible à l'adresse suivante:

https://zephyr.sunshower.io/site/

J'espère que cela aide les gens qui trébuchent à travers cela comme je l'ai fait.


0 commentaires