petersa
13th June 2001 10:17 UTC
Sorry if this is a bit hard to understand...
SetOutPath $TEMP
File SPLASH.EXE
Exec SPLASH.EXE
If SPLASH.EXE also exists in the same folder as the installer, that copy is run. If I change the line to:
Exec $TEMP\SPLASH.EXE
The right copy runs, but it doesn't work the way it should.
SPLASH.EXE waits for a file that NSIS will extract to the directory, but it's looking in the directory of the installer, because NSIS apparently hasn't set the working dir to $TEMP.
The documentation says that $OUTDIR is the working directory for Exec and ExecWait, but for me it isn't. Am I doing something wrong?
I know I can change SPLASH.EXE to look in the actual directory, but this looks like a bug. So I thought I'd point it out.
Edgewize
13th June 2001 12:05 UTC
SetOutPath only seems to affect file extraction, not the actual working directory.
I'll have to check if changing the working directory breaks anything before I fix this, so it might not make 1.44e. But I'll try to include it...
justin
13th June 2001 19:18 UTC
the output path doesn't actually change the currenet directory of the installer .. but when you go to execute, it uses that path to set the current directory of the process that you execute.
hence, you still need to do:
Exec $TEMP\whatever.exe
-Justin
Edgewize
13th June 2001 21:28 UTC
Gotcha. I forgot CreateProcess could even do that. I use this in my headers :)
#define ExecApp(path) CreateProcess(0,path,0,0,0,0,0,0,0,0)
petersa
14th June 2001 12:08 UTC
Okay...
...so if I did
SetOutPath $TEMP
Exec C:\WINDOWS\NOTEPAD.EXE
would the working dir for Notepad be $TEMP or C:\WINDOWS?
Edgewize
14th June 2001 18:10 UTC
According to the source code for NSIS, the current dir should be $TEMP.
If that doesn't seem to be the case, NOTEPAD could either be overriding the default output directory, or else the CreateProcess API call isn't working as documented or something.
I'll do some experimentation with this one.