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

1

2

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"
Fraise answered 28/12, 2011 at 11:37 Comment(3)
Could you post some command lines?Rizika
Done, I'm just calling my app's bundled JRE along with the class name.Fraise
You should fix your quotes just to be safe: ExecWait '"$instdir\app.exe" "param 1" param2 "para m3"' (Paths etc should be quoted)Sunglasses
S
14

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
Sunglasses answered 28/12, 2011 at 14:51 Comment(1)
Thanks, I wasn't aware that this would also set the current directory :)Fraise

© 2022 - 2024 — McMap. All rights reserved.