2011-12-28 35 views
8

Trước hết, đây không phải là một câu hỏi rất phổ biến về việc tạo một EXE từ các lớp Java. Tôi không cần phải làm thế.Thay thế biểu tượng trong Windows * .exe từ mã Java độc lập nền tảng mã nguồn mở

Để giải quyết NetBeans RFE #64612 mà không manual steps Tôi cần một Java (6+) thư viện mà có thể mất một hiện của Windows *.exe tập tin và thay thế biểu tượng của nó với một sự thay thế trong một định dạng phổ biến. Tệp thực thi, mà là chung chung và dựng sẵn (được phân phối ở dạng nhị phân), đã biết cách tải một tệp cấu hình ứng dụng cụ thể và sau đó bắt đầu JRE với các JAR ứng dụng khác nhau, vv; vấn đề duy nhất là nó có một biểu tượng chung, và tôi muốn thay thế biểu tượng đó như một phần của một bản dựng Java thuần túy với một biểu tượng ứng dụng cụ thể, vì vậy nó trông đẹp hơn.

Thư viện phải có sẵn theo giấy phép nguồn mở không có virus; đa nền tảng (phải chạy trên Windows, Linux, Mac, Solaris) vì vậy không thể mở rộng một số công cụ trợ giúp đặc trưng cho hệ điều hành; và phải chấp nhận đầu vào PNG, mặc dù EXE phải hoạt động trên XP nên according to Wikipedia nên nhúng định dạng BMP. Ở mức độ cao, giả Ant như một công cụ xây dựng, tôi muốn một cái gì đó như thế này:

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

Có ai biết nếu một công cụ phù hợp với các thông số kỹ thuật đã tồn tại? Từ các tìm kiếm trên web khác nhau, tôi tìm thấy Launch4J, nhưng điều này dường như chỉ là ngã ba windres cho công việc thực tế, do đó không dễ dàng di chuyển. Tôi tìm thấy JSmooth trông có vẻ hứa hẹn hơn - dường như bao gồm mã Java để xử lý codec ICO và thao tác các tệp PE - nhưng đó là GPL. WinRun4J có vẻ sử dụng mã gốc cho thao tác biểu tượng, mặc dù tôi đã gặp khó khăn sau các nguồn của nó. Jimi được cho là xử lý định dạng ICO (cho rằng vấn đề tiêu chuẩn javax.imageio dường như là tốt) nhưng tôi đoán không có cơ sở để cập nhật tài nguyên PE.

+0

Câu hỏi liên quan: http://stackoverflow.com/questions/1614772/how-to-change-jframe-icon –

+0

Một câu hỏi được liên kết trỏ đến http://java.net/projects/pe-file-reader nhưng đây là GPL và dường như chỉ đọc, không ghi, tệp PE. –

Trả lời

2

Theo người xây dựng sản phẩm Eclipse Rich Client Platform tôi,

  • Linux đòi hỏi một biểu tượng XPM
  • MacOSX đòi hỏi một tập tin ICNS
  • Solaris đòi hỏi 04:00 biểu tượng, lớn, trung bình, nhỏ, và Tiny
  • Windows (32 bit) yêu cầu 6 hình ảnh BMP riêng biệt hoặc tệp ICO.

Gói phân phối của bạn sẽ phải chứa tất cả các tệp này độc lập với nền tảng.

Tôi chưa làm việc với các nền tảng khác, nhưng trên Windows, bạn có thể thay đổi biểu tượng chương trình bằng cách nhấp chuột phải vào biểu tượng hiện tại và nhấp chuột trái vào Properties. Nhấp chuột trái vào tab Shortcut và nhấp chuột trái vào nút Change Icon. Duyệt qua thư mục phân phối và chọn tệp ICO.

Tôi chắc chắn có thể tự động thay đổi biểu tượng Windows khi bạn phân phối gói phân phối. Tôi tưởng tượng nó có thể trên các nền tảng khác.

+0

Thông tin cơ bản thú vị, nhưng không phải là câu trả lời cho câu hỏi của tôi. –

0

Bạn chỉ cần thay thế ICO hoặc BMP đầu tiên trong phần tài nguyên thực thi. Cái đó được trình thám hiểm tự động chọn làm biểu tượng để hiển thị.

+3

Phải, thay thế biểu tượng trong phần tài nguyên thực thi là những gì tôi muốn thực hiện. Nhưng câu hỏi đặt ra là làm thế nào để thực hiện điều này, cụ thể, từ một bản dựng dựa trên Java có thể chạy trên một hệ điều hành khác (có thể trên một máy chủ CI). –

2

Có dự án PE/COFF 4J có vẻ như có thể thực hiện những gì bạn muốn. Nó được cấp phép theo số Common Public License (CPL).

Một số lưu ý về điều đó:

  • Tác giả có vẻ là giống như cho WinRunJ. Dự án này thực sự có một trình soạn thảo tài nguyên PE trong nó, được gọi là RCEDIT.exe, nhưng nó sử dụng các cuộc gọi Windows nguyên bản như bạn chỉ ra chính mình. Tại sao tác giả không sử dụng dự án của riêng mình (PE/COFF 4J) để thực hiện điều này đánh bại tôi. Nó cho tôi một số lo ngại rằng có lẽ dự án PE/COFF 4J bị bỏ rơi.

  • Trang tài liệu cho PE/COFF 4J chỉ đề cập rằng dự án có thể phân tích cú pháp tệp PE nhưng tệp như tôi có thể cho bạn biết có thể phân tích cú pháp, sau đó thay đổi thứ gì đó (ví dụ: tài nguyên biểu tượng) rồi ghi hình ảnh quay lại đĩa.

Giống như bạn, tôi cũng đang tìm kiếm một giải pháp Java thuần túy có thể thao tác tài nguyên trong tệp .EXE (PE) và đã đưa tay trống. Đây là đặt cược tốt nhất cho đến nay.

Thay thế tài nguyên biểu tượng trong tệp .EXE khá đơn giản khi sử dụng các cuộc gọi Win32 gốc. Khi thực hiện nó từ Java thuần túy, bạn phải chắc chắn rằng tệp PE là nhất quán khi bạn ghi nó trở lại đĩa. Tôi đã không xem xét kỹ định dạng tệp PE ở mức độ sâu nhưng tôi cho rằng nhiều tham chiếu sẽ thay đổi khi thay thế/thêm tài nguyên, không chỉ là tài nguyên có liên quan đến tài nguyên mà bạn đang thay thế/thêm.

+1

Cảm ơn. Không còn làm việc trên NetBeans, nhưng tôi đã đề cập đến dự án này trong NetBeans RFE. (Chưa chấp nhận câu trả lời này chỉ vì tôi chưa xác minh rằng nó thực sự hoạt động cho mục đích này.) –

1

Dường như dự án nhật thực đã viết một ứng dụng java nhỏ để thay thế các biểu tượng.

IconExe from the eclipse project

Các app.exe và app64.exe trong Netbeans dường như có các biểu tượng sau trong phần tài nguyên:
48 x 48 32bit
32 x 31 32bit
48 x 48 8bit
31 x 31 8bit
16 x 16 8bit

tôi đoán 32 x 31 là một sai lầm

+0

Có lẽ là điểm khởi đầu tốt, mặc dù nó cần đầu vào ICO, vì vậy trước tiên bạn phải chuyển đổi đầu vào PNG. –