[wpkg-users] Questions about offline mode and executing the wpkg service
Rainer Meier
r.meier at wpkg.org
Thu Apr 3 20:56:27 CEST 2008
Hi Tomasz,
> It is a correct switch, but using it prevents passing a proper exit code
> to WPKG Client.
No, it does not. If used in the "topmost" script (not a sub-script
invoked via call) it will also terminate cmd.exe with the given code.
> Whether /b is used or not, it will exit a script with certain exit code.
Yes, but using the /b switch it will exit only the inner script
currently running.
> In other words, without /b, cmd.exe will terminate with exit code
> specified in "exit" command.
True, but there is no possibility to continue a script which has called
the one which exits without using the /b switch.
> With /b, cmd.exe will exit with exit code 0.
No, it will exit with the exit code specified. 'exit /b 2' will exit
with code 2.
> When we want to "fetch" the exit code in WPKG Client, /b switch must not
> be used.
Be assured it can be used - I use this very frequently.
An example can prove this.
"script1.cmd":
@echo off
call script2.cmd
echo exit code: %errorlvel%
pause
exit 1
"script2.cmd":
@echo off
exit /b 2
1. Test, calling script1.cmd from a CMD prompt:
- the term "exit code: 2" is printed
- after pressing enter at the 'pause' prompt the script closes down the
window (including the one where you typed "script1.cmd"). NOTE: Closing
the CMD window is normal if oyu double-click the cmd file, however when
invoking "script1.cmd" from a CMD prompt then you most probably do not
want to exit it. I never understood why Windows is behaving like this.
Here actually a sub-command exits its parent - totally strange, such a
thing will never happen on a unix shell.
- However, the exit code of script1.cmd will be code 1.
2. Test, calling script2.cmd, entering "echo %errorlevel% immediately
afterwards
- an errorlevel of 2 is printed
So "script2.cmd" exits properly with exit code 2 - which can be
evaluated by WPKG (verified several times).
The only difference is if you're going to change your script - or write
another script which has to invoke "script1.cmd". Imagine the following
script:
@echo off
echo Invoking script 1
call script1.cmd
echo doing something else
call scriptxy.cmd
exit /b 0
In such case everything after calling script1.cmd will _NEVER_ be
executed as script 1 totally closes down CMD.EXE. Yes, this is either a
bug on the CMD shell or just annoying design. Perhaps that happens on
Vista only (I just tested it here on Vista x64 now).
So scripts should never exit using 'exit <code>' from my point of view.
Using 'exit /b <code>' perfectly serves the purpose and works in every
case (no matter if your script is the topmost or one of the called ones.
br,
Rainer
More information about the wpkg-users
mailing list