2015-05-19 43 views
5

Tôi đang phát triển một ứng dụng sẽ được triển khai cho các máy tính Windows. Bởi vì khách hàng của tôi có rất ít kiến ​​thức về máy tính nên việc cài đặt và cập nhật cần phải dễ dàng nhất có thể. Tôi muốn cài đặt là bước thủ công duy nhất, bản cập nhật phải được thực hiện tự động.Làm thế nào để một ứng dụng Java tự cập nhật?

Cài đặt sẽ được thực hiện qua Installshield hoặc nhiều khả năng hơn bằng một trong các bản sao nguồn mở của nó. Trình cài đặt sẽ cài đặt các thành phần:

  • một thời gian chạy Java (Oracle JRE) như một loại ứng dụng di động (có nghĩa là bằng cách đơn giản sao chép các tập tin chứa và không sử dụng các trình cài đặt được cung cấp)
  • Apache Commons Daemon để cài đặt ứng dụng của tôi như một dịch vụ Windows
  • bản thân ứng dụng trong hình dạng của một vài lọ tạo ra với mùa xuân Boot

Khi một trong những thay đổi thành phần tôi muốn cập nhật một cách tự động và âm thầm như càng tốt. Ứng dụng sẽ có thể xác định xem các bản cập nhật có sẵn trên web hay không và tải chúng xuống.

Tôi có những tùy chọn nào để đạt được điều này? Java Webstart là trong mắt tôi không phải là một giải pháp tốt - ví dụ nó không cho phép tôi cập nhật thời gian chạy. Việc cung cấp trình cài đặt bản cập nhật sẽ cần tương tác của người dùng và thậm chí có thể là quyền quản trị để nó không chạy ngầm.

Liên kết được đề xuất bên dưới không phù hợp với vấn đề của tôi vì tôi sử dụng daemon cần cập nhật trong thời gian chạy và không có giải pháp nào trong bài đăng được liên kết hỗ trợ.

+0

bạn sẽ xuất bản các ứng dụng lọ cho một số repo maven? Về cơ bản bạn phải: 1. định kỳ kiểm tra phiên bản mới của các thành phần 2. nếu phiên bản có sẵn trực tuyến cao hơn phiên bản trên máy người dùng, tải xuống phiên bản mới hơn 3. khởi động lại ứng dụng của bạn với classpath cập nhật. Mỗi thành phần được phiên bản khác nhau và được xuất bản khác nhau. Có thể bạn sẽ cần một số container sẽ làm điều này cho bạn. –

+0

Hãy để họ tự cài đặt JRE và sử dụng webstart để cập nhật ứng dụng. – Stefan

+0

@Stefan: cài đặt JRE bình thường cho phép Java plugin mà nhiều người dùng không thích vì báo chí đánh giá Java/plugin như là một chủ đề để bảo mật máy tính. Và việc sử dụng trình cài đặt bình thường sẽ buộc người dùng phải tự cập nhật JRE (bất cứ khi nào nhân viên cập nhật thông báo cho họ về một bản cập nhật có sẵn). – Marged

Trả lời

2

Tôi có thể đề nghị bạn cân nhắc lại Java Web Start không? Thậm chí Wikipedia biết rằng

Web quan trọng Bắt đầu tính năng bao gồm khả năng để tự động tải về và cài đặt một JRE trong trường hợp người dùng không có cài đặt Java, và cho các lập trình để xác định các JRE phiên bản một chương trình cho nhu cầu trong để thực hiện.

Nếu bạn vẫn không muốn sử dụng Web Start thì đây là giải pháp hoàn toàn im lặng mà tôi sử dụng trên hộp Windows. Hãy nói rằng đây là restart.bat:

cd \myApp 
echo Killing myApp 
pskill.exe myApp 
TIMEOUT 5 

del /q Release 
copy \\mainCIcomputer\Build Release 

TIMEOUT 5 
cd Release 
start myApp.exe 

Tất cả những gì bạn phải làm là để bắt đầu quá trình riêng biệt và sau đó chạy restart.bat từ nó. Bạn có thể sử dụng bất kỳ kỹ thuật nào để xác định thời điểm tải lại ứng dụng của mình (ví dụ http/ftp request để nhận số phiên bản mới nhất và khởi động lại nếu nó khác với hiện tại). Đừng quên - quá trình này nên được tách ra để không bị giết với bạn myApp chính. Nó có thể được bắt đầu từ hàng loạt khác, hoặc, trong trường hợp của tôi, tôi sử dụng IronPython:

from System.Diagnostics import Process 
p = Process() 
p.StartInfo.UseShellExecute = False 
p.StartInfo.RedirectStandardOutput = False 
p.StartInfo.FileName = 'restart.bat' 
p.Start() 
p.WaitForExit() 
+0

Tôi đã loại trừ Java Web Start vì nó không đủ im lặng. Theo như tôi biết sau khi cài đặt JRE, người dùng sẽ bị nagged bất cứ khi nào có bản cập nhật. Thêm vào đó, tôi không muốn plugin Java được cài đặt và tôi cho rằng đây sẽ là một phần của quá trình cài đặt khi được sử dụng kết hợp với WebStart. – Marged

+0

OK. Cung cấp ví dụ hoàn toàn lẫn nhau. – Alex

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