Search code examples
javainstall4j

Obtain version information from prior installation


Running the "Update current installation" option, how do I obtain the version info from the prior installation? I've been through the API and the closest thing I've seen is the public static interface ApplicationRegistry.ApplicationInfo.

Edit
This is how I am currently going about it. It works but am not sure if this is the most feasible method.

import com.install4j.api.ApplicationRegistry;

ApplicationRegistry.ApplicationInfo[] AppInfo = ApplicationRegistry.getApplicationInfoById(context.getApplicationId());

return AppInfo[0].getVersion();

Solution

  • As an example, the following script checks if the same version is already installed:

    // The value returned by context.getInstallationDirectory() will be
    // the last installation directory if the user has already installed the application
    ApplicationRegistry.ApplicationInfo applicationInfo =
        ApplicationRegistry.getApplicationInfoByDir(context.getInstallationDirectory());
    
    if (applicationInfo == null) {
      // The application has never been installed before
        return true;
    }
    
    // The version of this installer is contained in a system installer variable
    String myVersion = (String)context.getVariable("sys.version");
    if (applicationInfo.getVersion().equals(myVersion)) {
        // In that case the current version is already installed.
        Util.showErrorMessage("The current version is already installed in this directory");
        // 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;
    } else {
        return true;
    }
    

    This could for example be used in a "Run script" action in the "Startup" node of the installer.