src/main/java/net/wasdev/wlp/common/plugins/util/InstallFeatureUtil.java
public static String productInfo(File installDirectory, String action) throws PluginExecutionException {
        Process pr = null;
        InputStream is = null;
        Scanner s = null;
        Worker worker = null;
        try {
            String command;
            if (OSUtil.isWindows()) {
                command = installDirectory + "\\bin\\productInfo.bat " + action;
            } else {
                command = installDirectory + "/bin/productInfo " + action;
            }
            pr = Runtime.getRuntime().exec(command);
            worker = new Worker(pr);
            worker.start();
            worker.join(300000);
            if (worker.exit == null) {
                throw new PluginExecutionException("productInfo command timed out");
            }
            int exitValue = pr.exitValue();
            if (exitValue != 0) {
                throw new PluginExecutionException("productInfo exited with return code " + exitValue);
            }
            
            is = pr.getInputStream();
            s = new Scanner(is);
            // use regex to match the beginning of the input
            s.useDelimiter("\\A");
            if (s.hasNext()) {
                return s.next();
            }
            return null;
        } catch (IOException ex) {
            throw new PluginExecutionException("productInfo error: " + ex);
        } catch (InterruptedException ex) {
            worker.interrupt();
            Thread.currentThread().interrupt();
            throw new PluginExecutionException("productInfo error: " + ex);
        } finally {
            if (s != null) {
                s.close();
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                }
            }
            if (pr != null) {
                pr.destroy();
            }
        }
    }
public static String productInfo(File installDirectory, String action) throws PluginExecutionException {
        Process pr = null;
        InputStream is = null;
        Scanner s = null;
        Worker worker = null;
        try {
            String command;
            if (OSUtil.isWindows()) {
                command = installDirectory + "\\bin\\productInfo.bat " + action;
            } else {
                command = installDirectory + "/bin/productInfo " + action;
            }
            pr = Runtime.getRuntime().exec(command);
            worker = new Worker(pr);
            worker.start();
            worker.join(300000);
            if (worker.exit == null) {
                throw new PluginExecutionException("productInfo command timed out");
            }
            int exitValue = pr.exitValue();
            if (exitValue != 0) {
                throw new PluginExecutionException("productInfo exited with return code " + exitValue);
            }
            
            is = pr.getInputStream();
            s = new Scanner(is);
            // use regex to match the beginning of the input
            s.useDelimiter("\\A");
            if (s.hasNext()) {
                return s.next();
            }
            return null;
        } catch (IOException ex) {
            throw new PluginExecutionException("productInfo error: " + ex);
        } catch (InterruptedException ex) {
            worker.interrupt();
            Thread.currentThread().interrupt();
            throw new PluginExecutionException("productInfo error: " + ex);
        } finally {
            if (s != null) {
                s.close();
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                }
            }
            if (pr != null) {
                pr.destroy();
            }
        }
    }
Runs the productInfo command and returns the output

@param installDirectory The directory of the installed runtime
@param action The action to perform for the productInfo command
@return The command output
@throws PluginExecutionException if the exit value of the command was not 0