2010-07-31 58 views
8

Tôi có một ứng dụng JNLP đang hoạt động mà tôi cần phân phối cho những người dùng cuối không có kỹ thuật khác nhau.Sự kết hợp của Launch4J và Java Web Start?

Nếu máy của người dùng đã cài đặt JVM gần đây, mọi thứ đều ổn. Họ chỉ cần nhấp đúp vào tệp JNLP mà tôi gửi cho họ và Java Web Start sẽ thực hiện phần còn lại.

Bây giờ tôi muốn phân phối thứ gì đó hoạt động với hoặc không có JVM, ví dụ: tệp .exe tự động tải xuống JVM tương thích nếu không có mặt nào, sau đó gọi javaws.exe để tải xuống tệp .jar và khởi chạy ứng dụng.

Launch4J là kết quả phù hợp nhất mà tôi đã tìm thấy, nhưng nó không thể khởi chạy chương trình qua javaws.exe. Các tùy chọn chỉ là javajavaw

Tôi muốn một sản phẩm có thể:

  • Tạo một khép kín .exe tập tin mà không đòi hỏi một JVM được cài đặt sẵn
  • Phân tích các tập tin .jnlp và xác định JVM chính xác để tải xuống nếu cần (Tôi biết Java Web Start có thể tải xuống JVM nếu cần, nhưng tôi muốn tránh phải tải xuống hai, đầu tiên để khởi động Java Web Start và thứ hai để chạy ứng dụng có thể yêu cầu cụ thể nhưng khác nhau JVM.)
  • Tải xuống và cài đặt JVM tự động, không chỉ cần hướng người dùng đến trang tải xuống Java hoặc mở trình hướng dẫn cài đặt mới.
  • Nhắc mật khẩu quản trị viên nếu cần thiết (để có quyền cài đặt JVM. Tôi không nghĩ rằng điều này được cài đặt trong trình cài đặt Sun JVM.)
  • Chỉ hiển thị một hộp thoại bảo mật (Tôi muốn nhắc người dùng một lần, để xác nhận họ tin tưởng .exe được tạo, nhưng tôi không muốn lời nhắc thứ hai xác nhận rằng họ tin tưởng tệp .jar sẽ có cùng nguồn và được ký với cùng một chứng chỉ.) Tôi cho rằng điều này sẽ yêu cầu trình tải xuống tự động cài đặt chứng chỉ trước khi khởi chạy JWS.)
  • (không cần thiết) Tải xuống tài nguyên ứng dụng (ví dụ: .jar tệp) trong nền đồng thời với JVM. Điều này sẽ yêu cầu bộ nhớ cache được chạy trước khi JVM được cài đặt, vì vậy bộ nhớ cache sẽ phải được thực hiện trong mã gốc và sau đó DownloadService sẽ giao tiếp với nó bằng cách sử dụng JNI.

Sản phẩm như thế này có tồn tại không? Tôi nghi ngờ nó không nhưng nó có giá trị một shot.


Cập nhật tôi thấy this article trong đó có giải pháp cho một số vấn đề có liên quan, mặc dù nó được thiết kế để cài đặt ẩn và tôi chủ yếu quan tâm cài đặt trực tuyến.

Trả lời

2

Tôi đã gặp sự cố tương tự. Tôi đã kết thúc với một BAT, một Shell và cuối cùng là một DMG cho Mac.

tôi thấy nhận xét này về cài đặt JRE automaded cho Windows sử dụng trình cài đặt Nullsoft:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

Tôi nghĩ JNLP bên ngoài bạn sẽ thấy khó khăn để có được tự động cho tất cả các nền tảng. Tuy nhiên trên dự án của tôi, trong hai năm, tôi đã không nhìn thấy phàn nàn về người dùng phải có java của mình. Tôi tin rằng hầu hết các máy sẽ có nó. Người dùng Windows phàn nàn về việc không có phím tắt, nhưng điều đó rất dễ sử dụng vbs.

Cũng trên Mac DMG AppBundle, đó là cách để chỉ định JRE. Mac sẽ có phiên bản mới nhất, trừ khi các máy PowerPC cũ hơn. Trong trường hợp đó không có Java6.

Trong số bạn kết thúc bằng một số trình chạy, tôi sẽ đề xuất chiến lược cập nhật tự động.

+0

Tôi không quá lo lắng về nền tảng không phải cửa sổ. Mac luôn cài đặt JVM và tôi cho rằng hầu hết người dùng Linux đều có kiến ​​thức kỹ thuật để tìm và nhấp đúp vào tệp '.jar' nếu cần. – finnw

0

Một cách tiếp cận khác có thể cũng là phân phối Sun JRE với tệp .BAT-gọi nó bằng nút chuyển/S, gây ra cài đặt im lặng.

Tôi chưa thấy bất kỳ điều gì khác cho phép cài đặt Java hoàn toàn im lặng kết hợp với cách gọi hàm javaws.

0

Ok tôi có được những gì bạn đang cố gắng làm nhưng tại sao bạn không muốn sử dụng javaws? Launch4J trông giống như một lựa chọn tốt để thay thế cho việc cài đặt java, vì nó sẽ cho phép sử dụng liền mạch tệp jar.

javaws ít nhiều sử dụng java.exe với quyền bảo mật và một số tùy chọn khởi chạy. Nhưng các quyền bảo mật có thể bị vô hiệu hóa nếu bạn sử dụng chứng chỉ mà người dùng tin cậy.

Ngoài ra tôi không chắc chắn khi javaws được giới thiệu nhưng tôi chắc chắn rằng nó đã có sẵn trong java 1.5 mà tôi gần EOL. Vì vậy, trừ khi người dùng của bạn đã không có một java cài đặt trong nhiều năm tôi nghi ngờ nhận được chúng để khởi động jnlp sẽ là một vấn đề. Ngay cả khi họ đang chạy một phiên bản cũ hơn, bạn có thể thêm một phiên bản java cần thiết vào jnlp và điều này sẽ tự động được tải xuống cho ứng dụng đó.

+0

I * do * muốn sử dụng hàm. Trường hợp có vấn đề là một máy tính chưa từng cài đặt Java. – finnw

+0

javaws chỉ hoạt động nếu Java đã được cài đặt rồi. –

2

Bạn cũng có thể xem xét biên dịch dự án của mình với Excelsior JET. Ngoài mọi thứ khác, nó cũng tạo ra sự phân phối tự cung cấp có kích thước hợp lý.

3

Tôi đã có thể thực hiện việc này & sử dụng nó trong quá trình sản xuất.

viết một lớp khởi động đơn giản, jar nó và Launch4j bình.

đây là chính cho lớp bootstrap đơn giản:

public static void main(String[] args) { 
    try {  
    final File jnlp = File.createTempFile("temp", ".jnlp"); 
    final URL url = new URL("http://yourjnlp-wherever-youre-hostingit.jnlp"); 
    yourCopyStreamMethodYouWrote(url.openStream(),new FileOutputStream(jnlp)); 
    Desktop.getDesktop().open(jnlp); 
    } catch (final Throwable t) { 
    // do something useful here 
    } 
} 
+0

Âm thanh này thích hợp với cách thực hiện. launch4j đảm bảo một JVM là hiện tại (tôi không biết nếu nó có thể cài đặt tự động hoặc thực hiện một với nó), và gọi mã. Đoạn mã sau đó chỉ đơn giản yêu cầu trình duyệt khởi chạy tập lệnh JNLP. –

+0

Điều này là thông minh, nhưng bạn không nhận được hai màn hình nag (bảo mật nags, "bạn có muốn chạy") cho cả lớp này và cũng cho ứng dụng Java Web Start của bạn? – Joel

0

Mặc dù không phải miễn phí cho sử dụng phi thương mại, Install4j cung cấp một hệ thống cài đặt bản địa cho các ứng dụng Java. Gói JRE được hỗ trợ. Tôi không chắc chắn nó có thể phân tích cú pháp JNLP tự động, nhưng nó có thể là một cái gì đó đáng để kiểm tra.

Là trường hợp sử dụng mẫu, số Integrated Genome Browser dựa trên Java được phân phối bằng trình cài đặt được tạo bởi công cụ này. Xem install4j configuration file của nó.

Các vấn đề liên quan