code: @Override
    public ProcessAdapter execute(File directory, String... commandLine) {
  
      Assert.isTrue(isDirectory(directory), "[%s] is not a valid directory", directory);
  
      Assert.notEmpty(commandLine, "The command-line %s must contain at least 1 command",
        Arrays.toString(commandLine));
  
      try {
        Environment environment = getEnvironment();
  
        Process process = doExecute(commandLine, directory, environment);
  
        ProcessContext processContext = newProcessContext(process)
          .ranBy(SystemUtils.USERNAME)
          .ranIn(directory)
          .ranWith(commandLine)
          .using(environment);
  
        return newProcessAdapter(process, processContext);
      }
      catch (IOException e) {
        throw new ProcessExecutionException(String.format("Failed to execute program %1$s in directory [%2$s]",
          Arrays.toString(commandLine), directory), e);
      }
    }
docs: Uses the Java {@link Runtime} to execute the program defined by the given {@code commandLine}
  in the given {@link File directory}.
  
  @param directory {@link File directory} in which the program will run.
  @param commandLine array of {@link String} values constituting the program and its runtime arguments.
  @return a {@link Process} object representing the running program.
  @throws IllegalArgumentException if the {@link File} reference is not a valid, existing directory
  or the command-line is unspecified.
  @throws ProcessExecutionException if the {@link Process} fails to start.
  @see #doExecute(String[], File, Environment)
  @see org.cp.elements.process.ProcessAdapter
  @see org.cp.elements.process.ProcessContext
  @see java.lang.Process
  @see java.io.File