Как мне предотвратить повторную установку с другим каталогом установки от создания второй установки?

#install4j

#install4j

Вопрос:

В настоящее время это установщик только для Windows. У меня выбрано «Определить предыдущую установку». У меня также отключено «Оповещение об установке обновлений» на экране приветствия и условие в «Месте установки», чтобы не показывать диалоговое окно, если context.isUpdateInstallation() имеет значение true.

Но я все равно могу изменить каталог установки через файл ответов при автоматической установке.

В результате у меня есть двоичные файлы в двух каталогах, у меня есть только одна служба (созданная установщиком), которая указывает на самый последний каталог установки, и две записи для моего установщика в разделе «Программы и компоненты».

Желаемое поведение будет заключаться в том, что двоичные файлы будут перемещены в новый каталог, и только одна запись в «Программы и компоненты». Я мог бы жить с установщиком, игнорирующим новый каталог установки, и просто убедиться, что все файлы в каталоге установки есть.

Спасибо, Питер

Ответ №1:

Вы можете добавить действие «Запустить скрипт», которое проверяет, обновляете ли вы предыдущую установку или нет.

 // Check all installations with the same application ID
// At most there will be one in this case
ApplicationRegistry.ApplicationInfo[] applicationInfos =
    ApplicationRegistry.getApplicationInfoById(context.getApplicationId());

if (applicationInfos.length > 0) {
    ApplicationRegistry.ApplicationInfo applicationInfo = applicationInfos[0];

    if (applicationInfo.getInstallationDirectory().equals(context.getInstallationDirectory())) {
        // In that case the previous installation directory is different than 
        // the current installation directory.
        Util.showErrorMessage("The applicaton is already installed in "   
            applicationInfo.getInstallationDirectory()   
            " Update that installation or uninstall it first.");
        // By returning "false", the action will fail and the installer will quit.
        // Note that you have to set the "Failure strategy" property of your "Run script" action to
        // "Quit on error", otherwise the installer will continue.
        return false;
    }
}
return true;    
  

Комментарии:

1. Для моего установщика я изменил приведенный выше код «Run script» с помощью context.setInstallationDirectory() вместо остановки установки, чтобы гарантировать, что каталог установки не изменится.