Как получить галочку IzPack для существующей версии программного обеспечения? - PullRequest
5 голосов
/ 04 декабря 2009

У меня есть приложение, для которого мы используем IzPack для создания установщика. Установщик работает нормально в своем текущем состоянии, однако мне нужно добавить функциональность, которая позволяет ему проверять , была ли установлена ​​ существующая версия программного обеспечения.

Я понимаю, что IzPack поддерживает это "из коробки", используя CheckedHelloPanel, к сожалению, это работает только для Windows, так как, похоже, это зависит от реестра Windows.

Есть ли способ настроить IzPack таким образом, чтобы он мог обнаруживать существующие установки ?

Мне нужно иметь возможность определить, существует ли он, и просто отобразить сообщение, уведомляющее пользователя ... Бонусные баллы за то, как дать пользователю возможность вызвать деинсталлятор существующей установки.


  • Предположим, что программное обеспечение будет установлено только с использованием нового установщика
  • Только в IzPack: пожалуйста, не предлагайте альтернативы, так как мы не можем изменить это сейчас
  • Если вы предлагаете использовать <validator>, пожалуйста, включите пример кода класса валидатора, потому что я рассмотрел это, но не знаю, с чего начать

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Я написал это, чтобы разрешить установку моего приложения поверх установки 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 добавит его в папку установщика.

0 голосов
/ 17 декабря 2009

Работает только в Windows, потому что только Windows имеет реестр. Однако в приложениях Linux традиционно нет настраиваемых унифицированных расположений. Например, ваши сценарии запуска будут помещаться в папку bin, ваши двоичные файлы - в / opt, ваша документация - в / var и т. Д. Идея состоит в том, что существует один единственный каталог "ваше приложение", выбранный пользователем и содержащий все, что связано с приложением, является концепцией Windows.

Так или иначе, способ решить эту проблему в Linux - это установить различные части вашего приложения в неопределяемых пользователем местах. Таким образом, вы точно знаете, где будет ваше приложение, если оно уже установлено.

...