Как получить проверку IzPack для существующей версии программного обеспечения?
У меня есть приложение, для которого мы используем IzPack для создания установщика. Установщик работает нормально в своем текущем состоянии, однако мне нужно добавить функциональность, которая позволяет ему проверить, была ли установлена существующая версия программного обеспечения.
Я понимаю, что IzPack поддерживает это из коробки, используя его CheckedHelloPanel
К сожалению, это работает только для Windows, так как это зависит от реестра Windows.
Есть ли способ настроить IzPack таким образом, чтобы он мог обнаруживать существующие установки?
Мне нужно быть в состоянии определить, есть ли один, и просто отобразить сообщение, уведомляющее пользователя... Бонусные баллы за то, как дать пользователю возможность вызвать деинсталлятор существующей установки.
- Предположим, что программное обеспечение будет установлено только с использованием нового установщика
- Только в IzPack: пожалуйста, не предлагайте альтернативы, так как мы не можем изменить это сейчас
- Если вы предлагаете использовать
<validator>
Пожалуйста, включите пример кода класса валидатора, потому что я рассмотрел это, но не знаю с чего начать
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 добавит его в папку установщика.
Это работает только на Windows, потому что только Windows имеет реестр. Однако в приложениях Linux традиционно нет настраиваемых унифицированных расположений. Например, ваши сценарии запуска будут помещаться в папку bin, ваши двоичные файлы - в / opt, ваша документация - в /var и т. Д. Идея состоит в том, что существует один единственный каталог "ваше приложение", выбранный пользователем и содержащий все, что связано с приложением, является концепцией Windows.
Так или иначе, способ решить эту проблему в Linux - это установить различные части вашего приложения в неопределяемых пользователем местах. Таким образом, вы точно знаете, где будет ваше приложение, если оно уже установлено.