Windows XP SP3
From WPKG | Open Source Software Deployment and Distribution
Silent installer for Windows XP Service Pack 3.
Checks uninstall information and registry key "CSDVersion" so that it will not try to install on a machine with SP3 factory preinstalled, which typically does not show "Windows XP Service Pack 3" in the Add/Remove program application.
Technet page for Service Pack 3: http://technet.microsoft.com/en-us/windowsxp/0a5b9b10-17e3-40d9-8d3c-0077c953a761.aspx
<?xml version="1.0" encoding="UTF-8"?> <packages> <package id="WinXP-SP3" name="Windows XP Service Pack 3" revision="1" reboot="true" priority="0"> <check type="logical" condition="or"> <check type="registry" condition="equals" path="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName" value="Microsoft Windows 2000" /> <check type="registry" condition="equals" path="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CSDVersion" value="Service Pack 3" /> <check type="uninstall" condition="exists" path="Windows XP Service Pack 3" /> </check> <install cmd='%SOFTWARE%\ServicePacks\install-localized-SP3.cmd'> <exit code="0" /> <exit code="3010" /> </install> <remove cmd='%WINDIR%\$NtServicePackUninstall$\spuninst\spuninst.exe /quiet /norestart'> <exit code="0" /> <exit code="3010" /> </remove> </package> </packages>
Instead of calling the Service Pack installer straight from within the WPKG package, we call a batch-file which determines the system-locale and executes the localized service pack installer (as diferent locales won't install).
This is the possible source code of that batch-files install-localized-SP3.cmd (You can of course add/delete languages to your needs; see http://www.microsoft.com/globaldev/reference/lcid-all.mspx for a complete list)
@echo off :detect for /f "Skip=1 Tokens=3*" %%i in ('reg QUERY "hklm\system\controlset001\control\nls\language" /v Installlanguage') do set language=%%i :: Dutch - Belgium if "%language%" == "0813" ( set LANG=NLD goto select ) :: Dutch - Netherlands if "%language%" == "0413" ( set LANG=NLD goto select ) :: English - United States if "%language%" == "0409" ( set LANG=ENU goto select ) :select echo Found Language: %LANG% echo installing %SOFTWARE%\ServicePacks\WindowsXP-KB936929-SP3-x86-%LANG%.exe /quiet /norestart %SOFTWARE%\ServicePacks\WindowsXP-KB936929-SP3-x86-%LANG%.exe /quiet /norestart exit /B %ERRORLEVEL%
Still to be investigated which is the best command line switches combination. Available command line switches are:
/help /quiet /passive /norestart /forcerestart /warnrestart[:<seconds>] /promptrestart /overwriteoem /nobackup /forceappsclose /integrate:<full path> /d:<path> /log:<full path>
UninstallString string value in the registry key "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Windows XP Service Pack" reports "c:\windows\$NtServicePackUninstall$\spuninst\spuninst.exe", didn't check if it works as expected.
Spuninst.exe available command line switches are:
/help /quiet /passive /norestart /forcerestart /warnrestart[:<seconds>] /promptrestart /forceappsclose /log:<full path>