如何获得现有版本软件的IzPack tocheck?

时间:2009-12-04 06:08:27

标签: java configuration installer izpack

我有一个应用程序,我们使用IzPack来创建安装程序。安装程序在当前状态下运行良好,但是,我需要添加一些功能,使其能够检查是否已安装该软件的现有版本

我理解IzPack使用CheckedHelloPanel开箱即用,不幸的是,这只适用于Windows,因为它似乎依赖于Windows注册表。

有没有办法配置IzPack,使其能够检测现有安装

我需要能够检测是否有一个并且仅显示通知用户的消息...如何为用户提供触发现有安装的卸载程序的选项的加分点。


  • 假设仅使用新安装程序安装软件
  • 仅限IzPack:请不要提出替代方案,因为我们现在无法改变
  • 如果您建议使用<validator>,请提供验证者类的代码示例,因为我已经考虑了这一点,但不知道从哪里开始

2 个答案:

答案 0 :(得分:2)

我写这个是为了允许我的应用程序安装在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);

 }
}

然后安装程序有一个类似

的部分
<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" />

最后一点确保izpack将它添加到安装程序jar中。

答案 1 :(得分:0)

它仅适用于Windows,因为只有Windows才有注册表。但是,在Linux应用程序中,传统上没有自定义的统一位置。例如,您的运行脚本将放在bin文件夹中,您的二进制文件将放入/ opt,您的文档将放入/ var等。这个想法是有一个单独的“your-app”目录由用户选择并包含与应用程序相关的所有内容都是Windows概念。

所以无论如何,在Linux中解决这个问题的方法是在非用户定义的位置安装应用程序的各个部分。这样,您就可以确切了解应用程序的安装位置。