2011-12-28 15 views
8

En primer lugar, esto no es un duplicado de la cuestión muy común de hacer un EXE de las clases de Java. No necesito hacer eso.Reemplazar el icono en Windows * .exe del código Java independiente de la plataforma de fuente abierta

Para resolver NetBeans RFE #64612 sin manual steps Necesito un (6+) biblioteca de Java que puede tomar una ya existente de archivos de Windows *.exe y reemplazar su icono con un sustituto en un formato común. El ejecutable, que es genérico y preconstruido (distribuido en forma binaria), ya sabe cómo cargar un archivo de configuración específico de la aplicación y luego inicia el JRE con varios JAR de aplicación, etc .; el único problema es que tiene un ícono genérico, y me gustaría reemplazar ese ícono como parte de una compilación pura de Java con un ícono específico de la aplicación, por lo que se ve más bonito.

La biblioteca debe estar disponible bajo una licencia de código abierto no viral; multiplataforma (debe ejecutarse en Windows, Linux, Mac, Solaris) por lo que no se puede bifurcar alguna herramienta de ayuda específica del sistema operativo; y debe aceptar la entrada PNG, aunque el EXE debe funcionar en XP para que according to Wikipedia incruste el formato BMP. En un nivel alto, suponiendo hormiga como una herramienta de construcción, me gustaría algo como esto:

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

¿alguien sabe si existe una herramienta de búsqueda de estas especificaciones ya? De varias búsquedas en la web, encontré Launch4J, pero esto parece simplemente hornear windres para el trabajo real, por lo tanto, no es trivialmente portátil. Encontré JSmooth que parece más prometedor, parece incluir código Java para manejar el códec ICO y manipular archivos PE, pero es GPL. WinRun4J busca utilizar el código nativo para la manipulación de iconos, aunque tuve dificultades para seguir sus orígenes. Jimi supuestamente maneja el formato ICO (para el caso, el estándar javax.imageio parece también) pero supongo que no tiene ninguna facilidad para actualizar los recursos PE.

+0

Pregunta relacionada: http://stackoverflow.com/questions/1614772/how-to-change-jframe-icon –

+0

Una pregunta relacionada apunta a http://java.net/projects/pe-file-reader pero esta es GPL y parece solo leer, no escribir, archivos PE. –

Respuesta

2

Según mi constructor producto Eclipse Rich Client Platform,

  • Linux requiere un icono XPM
  • MacOSX requiere un archivo ICNS
  • Solaris requiere 4 iconos PM, grande, mediano, pequeño, y Tiny
  • Windows (32 bit) requiere 6 imágenes BMP separadas, o un archivo ICO.

Su paquete de distribución deberá contener todos estos archivos para que sean independientes de la plataforma.

No he trabajado con las otras plataformas, pero en Windows, puede cambiar el icono del programa haciendo clic con el botón derecho en el icono existente y haciendo clic con el botón izquierdo en Propiedades. Haga clic con el botón izquierdo en la pestaña Acceso directo y luego, haga clic en el botón Cambiar icono. Examine el directorio de distribución y seleccione el archivo ICO.

Estoy seguro de que es posible automatizar el cambio de icono de Windows cuando entregue el paquete de distribución. Me imagino que es posible en las otras plataformas.

+0

Información de fondo interesante, pero no una respuesta a mi pregunta. –

0

Simplemente tiene que reemplazar el primer ICO o BMP en la sección de recursos ejecutables. Ese es automáticamente elegido por el explorador como el icono para mostrar.

+3

Correcto, reemplazar el ícono en la sección de recursos ejecutables es lo que quiero lograr. Pero la pregunta era cómo hacer esto, concretamente, desde una versión basada en Java posiblemente ejecutándose en otro SO (posiblemente en un servidor de CI). –

2

Existe el proyecto PE/COFF 4J que parece ser capaz de hacer lo que usted desea. Tiene licencia bajo el Common Public License (CPL).

Algunas notas sobre que:

  • El autor parece ser la misma que para WinRunJ. Este proyecto en realidad tiene un editor de recursos PE, llamado RCEDIT.exe, pero usa llamadas nativas de Windows como usted mismo señala. Por qué el autor no usó su propio proyecto (PE/COFF 4J) para lograr esto, me supera. Me preocupa que quizás se abandone el proyecto PE/COFF 4J.

  • La página de documentación para PE/COFF 4J solo menciona que el proyecto puede analizar un archivo PE pero como archivo puedo decir que puede analizar, luego cambiar algo (por ejemplo, un recurso icono) y luego escribir la imagen volver al disco.

Al igual que también he estado buscando una solución pura de Java que podrían manipular los recursos en un (archivo PE) .EXE y han llegado con las manos vacías. Esta es la mejor apuesta hasta ahora.

Reemplazar un recurso icono en un archivo .EXE es bastante simple cuando se utilizan las llamadas Win32 nativas. Al hacerlo desde Java puro, tienes que asegurarte de que el archivo PE sea consistente cuando lo vuelvas a escribir en el disco. No he examinado en profundidad el formato del archivo PE, pero supongo que muchas referencias cambiarán al reemplazar/agregar un recurso, no solo el relacionado con el recurso que está reemplazando/agregando.

+1

Gracias. Ya no trabajo en NetBeans, pero mencioné este proyecto en NetBeans RFE. (Aún no acepto esta respuesta solo porque no he verificado que realmente funcione para este propósito.) –

1

Parece que el proyecto eclipse ha escrito una pequeña aplicación java para reemplazar los iconos.

IconExe from the eclipse project

El app.exe y app64.exe en Netbeans parecen tener los iconos de seguimiento en la sección de recursos:
48 x 48 de 32 bits
32 x 31 de 32 bits
48 x 48 8bit
31 x 31 8bit
16 x 16 8bit

estoy adivinando el 32 x 31 es un error

+0

Probablemente sea un buen punto de partida, aunque requiere la entrada de ICO, por lo que primero tendría que convertir una entrada PNG de alguna manera. –

Cuestiones relacionadas