Поскольку вы не хотели идти по пути Runtime.getRuntime().exec(..)
, вам придется повозиться. Мы использовали launch4J, и у нас никогда не было варианта использования, который вы ищете. Я не думаю, что launch4J имеет документированный Java API.
Однако вы можете возиться с задачей Ant, используемой в launch4J, и использовать ее для своих целей здесь.
Посмотрите на источник задачи
Вы увидите, что он использует net.sf.launch4j.Builder
и net.sf.launch4j.config.Config
для "сборки" EXE.