Search code examples
javaprocessnsis

NSIS - Set the working directory for a process before running it


As above. I'm specifically running a Java program using ExecWait, by invoking java.exe and passing the classname. The application I'm running relies on relative paths and has to be run from a specific directory, however when I directly call java, it simply uses the installer location as the current directory and fails.

Is there a way to get around this?

Update: Here's my commandline:

ExecWait "$INSTDIR\MyApp\jre\bin\java.exe -cp $INSTDIR\MyApp\lib\*; MyJavaClassName"

Solution

  • SetOutPath sets the current/working directory for the process, it should be inherited by the child process...

    Push $OUTDIR
    SetOutPath $myspecialdir
    ExecWait '"$instdir\myapp.exe"'
    Pop $OUTDIR
    SetOutPath $OUTDIR # Optional if working directory does not matter for the rest of the code
    

    or

    SetOutPath $myspecialdir
    ExecWait '"$instdir\myapp.exe"'
    SetOutPath $instdir