Rebooting
WPKG can reboot the machine if needed. Rebooting can be defined in a package definition in two places:
- after a command exited with a given code,
- after all commands were executed.
command exited with a given code
Here, we schedule a reboot when the below command exited with code 3010. Note where 'reboot="true"' entry is located:
<install cmd='msiexec /qn /i "%SOFTWARE%\package.msi"' >
<exit code="3010" reboot="true" />
<exit code="0" />
</install>
<install cmd='%SOFTWARE%\fix_icons.bat' />
The reboot=true attribute on an exit code forces an immediate reboot. Unfortunately all following commands are skipped then. Sometimes (maybe even more often) you might like to just set the package reboot flag depending on a command exit code. Therefore, you can use reboot='delayed' within the command nodes. This allows to schedule a reboot instead of immediately executing it. The effect is the same as setting reboot='true' on package level (reboot after executing all commands. However it allows you to leave reboot='false' on package level and schedule a reboot based on command exit codes. Other possible values are reboot='postponed', reboot='false', and undefined, which defaults to 'false' - see down below for more details.
rebooting after executing all commands
To reboot after all commands were executed, define your package similarly to the one below. Note the 'reboot="true"' entry:
<package
id="sample_package"
name="This package will reboot after "
revision="1"
reboot="true">
<check type="uninstall" condition="exists" path="Sample entry in Add or Remove Programs" />
<install cmd='"%SOFTWARE%\sample\myprogram.exe" /silent'>
<install cmd='"%SOFTWARE%\sample\fixlinks.bat'>
<remove cmd='%PROGRAMFILES%\sample\uninst.exe -quiet' />
<upgrade cmd='"%SOFTWARE%\sample\myprogram.exe" /silent' />
<upgrade cmd='"%SOFTWARE%\sample\fixlinks.bat'>
</package>
"true", "false" and "postponed" are allowed as a value of the reboot attribute within the package node. The states have the following effect: "true" Immediate reboot after package installation. This will take precedence of any command-level reboot="postponed" attribute if present and reboot immediately after package installation. A reboot="true" attribute on command-level will still result in an immediate reboot. Resulting status depending on command-level reboot flag: "true" immediate reboot after command execution "delayed" reboot after package installation "postponed" reboot after package installation "false" reboot after package installation "postponed" Schedule reboot after installing all packages within this session, for example after synchronizing. Resulting status depending on command-level reboot flag: "true" immediate reboot after command execution "delayed" reboot after package installation "postponed" reboot after all actions are completed "false" reboot after all actions are completed "false" No reboot unless one is defined at command-level. or not set Resulting status depending on command-level reboot flag: "true" immediate reboot after command execution "delayed" reboot after package installation "postponed" reboot after all actions are completed "false" no reboot As a result there are four possibilities to schedule a reboot in order of precedence: immediate Command node specified reboot=true, immediate reboot takes place. package Reboot is issued right after installing: - package specifies reboot="true" OR - any command node specified reboot="delayed" postponed Reboot will take place after all packages have been applied. - package specifies reboot="postponed" OR - any command node specified reboot="postponed" none No reboot is issued by this package: - package does not specify reboot or specifies reboot="false" AND - no command node specified any form of reboot reboot This means that an immediate reboot always has the highest priority. You can just set "reboot markers" on a "timeline" on package and command level where the closest reboot marker will be executed: immediate => package => postponed => none Exit code 0 is not any more automatically regarded as "successful" value. Even code 0 is now evaluated by exit code nodes. If no node is found it is still assumed that the command was successful. This allows administrators to schedule a reboot (immediate/delayed/postponed) even on exit code 0.