We recently moved from InstallBuilder 15 to InstallBuilder 16 ("BitRock InstallBuilder for Windows 16.1.0", to be exact).
After that running sub-installers was broken on two occasions. Both sub-installers were invoked using the <runProgram> action. One concerned the JDK installer, one an invocation of msiexec.
Here is the msiexec invocation:
<runProgram>
<program>msiexec</program>
<programArguments>/passive /norestart /i "my msi file.msi" ADDLOCAL=Foo /lv "${installdir.dos}\foo\msi.log" INSTALLDIR="${installdir.dos}\foo\installation"</programArguments>
</runProgram>
This was the Java installer invocation:
<runProgram>
<program>${installdir}/jdk-8u73-windows-x64.exe</program>
<programArguments>/s INSTALLDIR="${INSTALLDIR}\jdk\${javaVersion}" /L "${INSTALLDIR}\jdk\log"</programArguments>
</runProgram>
Both had suitable values for the installer variables. Both ran fine under InstallBuilder 15. Both started to fail when we upgraded to InstallBuilder 16. In both cases the program being run had difficulties with the command line parsing. The Java installer threw up with something like "error in configuration file: line 1
", and msiexec opened the help dialog for its command line arguments. Both could be fixed by putting the entire invocation in a Windows .cmd
file (via <writeFile>) and calling this instead.
Has something changed between InstallBuilder 15 and 16 in the way subprocesses are invoked, or arguments passed to them? Is there a better way to resolve my issues (e.g. better quoting)?