2009-12-04 39 views
5

Tôi có một ứng dụng mà chúng tôi sử dụng IzPack để tạo trình cài đặt. Trình cài đặt hoạt động tốt ở trạng thái hiện tại, tuy nhiên, tôi cần thêm chức năng cho phép nó kiểm tra xem phiên bản hiện tại của phần mềm đã được cài đặt chưa.Làm thế nào để có được IzPack để kiểm tra cho một phiên bản hiện tại của phần mềm?

Tôi hiểu rằng IzPack hỗ trợ việc này ra khỏi hộp bằng cách sử dụng CheckedHelloPanel, tiếc là chỉ hoạt động đối với Windows, vì dường như nó phụ thuộc vào cửa sổ đăng ký.

Có cách nào để định cấu hình IzPack sao cho có thể phát hiện các cài đặt hiện có?

Tôi cần có khả năng phát hiện xem có một và chỉ hiển thị thông báo thông báo cho người dùng ... Điểm thưởng cho cách cung cấp cho người dùng tùy chọn kích hoạt trình gỡ cài đặt hiện có.


  • Giả sử rằng phần mềm sẽ chỉ được cài đặt bằng cách sử dụng cài đặt mới
  • IzPack chỉ: xin đừng đề nghị lựa chọn thay thế, như chúng ta không thể thay đổi mà bây giờ
  • Nếu bạn đề nghị sử dụng <validator>, vui lòng đính kèm một mẫu mã của lớp trình xác thực, bởi vì tôi đã xem xét điều này, nhưng không biết bắt đầu từ đâu

Trả lời

0

Nó chỉ hoạt động trên Windows, bởi vì chỉ Windows có đăng ký. Tuy nhiên, trong các ứng dụng Linux theo truyền thống không có các vị trí thống nhất tùy chỉnh. Ví dụ: các tập lệnh chạy của bạn sẽ đi vào một thư mục bin, các tệp nhị phân của bạn sẽ đi vào/opt, tài liệu của bạn sẽ đi vào/var, v.v. Ý tưởng rằng có một thư mục "ứng dụng của bạn" được người dùng chọn và chứa mọi thứ liên quan đến ứng dụng là một khái niệm Windows.

Vì vậy, dù sao đi nữa, cách để giải quyết vấn đề này trong Linux là cài đặt các phần khác nhau của ứng dụng của bạn ở các vị trí không do người dùng xác định. Bằng cách đó, bạn biết chính xác vị trí của ứng dụng nếu ứng dụng đã được cài đặt.

+0

Cảm ơn Gabriel, đó là một chiến lược tốt, nhưng tôi muốn biết làm cách nào để đạt được điều đó, cụ thể cho IzPack? – bguiz

+0

Đó chỉ là chức năng cơ bản của IzPack ... sao chép các tệp nhị phân của bạn đến các vị trí khác nhau. Hãy xem phần tử gói trong tài liệu IzPack: http://izpack.org/documentation/installation-files.html#the-packs-element-packs –

2

Tôi đã viết điều này để cho phép ứng dụng của tôi được cài đặt trong quá trình cài đặt jboss.

public class JBossChecker { 

private static boolean tempJBossEnv; 
private static boolean tempJBossDirectoryExists; 

static { 
    String s = System.getenv("JBOSS_HOME"); 
    tempJBossEnv= (s!=null); 

    if(tempJBossEnv) { 
    File f = new File(s); 
    tempJBossDirectoryExists= (f.exists() && f.isDirectory()); 
    } 
    hasJBossEnv =tempJBossEnv; 
    hasJBossDir = tempJBossDirectoryExists; 
} 

public static boolean hasJBossDir; 
public static boolean hasJBossEnv; 

public static void main(String[] args){ 
    System.out.println("Jboss environment "+hasJBossEnv); 
    System.out.println("Jboss directory "+hasJBossDir); 

} 
} 

Sau đó trình cài đặt có một phần như

<conditions> 
    <condition type="java" id="jbossEnv"> 
      <java> 
       <class>au.com.codarra.ela.installer.JBossChecker</class 
       <field>hasJBossEnv</field> 
      </java> 
      <returnvalue type="boolean">true</returnvalue> 
</condition> 

<condition type="java" id="jbossDir"> 
      <java> 
       <class>au.com.codarra.ela.installer.JBossChecker</class> 
       <field>hasJBossDir</field> 
      </java> 
      <returnvalue type="boolean">true</returnvalue> 
</condition> 

</conditions> 

<installerrequirements> 
<installerrequirement condition="jbossEnv" message="Your system does not have the environment variable JBOSS_HOME set. Cannot update your system. Is XXXX installed on this system?" /> 
<installerrequirement condition="jbossDir" message="Your system does not have a directory at the location in the environement variable JBOSS_HOME . Cannot update your system. Is XXXX installed on this system?" /> 
</installerrequirements> 

<dynamicvariables> 
<variable name="INSTALL_PATH" value="${ENV[JBOSS_HOME]}"/> 
</dynamicvariables> 
<jar src="c:\dev\xxxx\build\installer.jar" /> 

Bit cuối cùng đảm bảo izpack thêm nó vào jar cài đặt.

+0

@Tim bạn có thể vui lòng thụt lề/định dạng lại mã java không? Nó không được SO phân tích cú pháp. – bguiz

+0

@Tim cảm ơn bạn đã định dạng lại mã! Tôi có một câu hỏi khác: Bạn đặt lớp của bạn ở đâu, 'JBossChecker' - làm cách nào để đảm bảo rằng nó được tải lên đường dẫn lớp khi trình cài đặt được chạy? – bguiz

+0

Dòng cuối cùng của mã * jar * hợp nhất jar này vào trình cài đặt izpack được tạo. Vì vậy, nó hoạt động như văn bản. –

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