This is a low-resolution version of the logo of Windows XP by Microsoft, protected by copyright

Create custom Windows installation media with nLite

Who would have thought about using nLite 🗄️, a program for creating a custom Windows XP iso, in 2026; twelve years after official support ended?

Truth be told, I still use Windows XP from time to time. I could avoid it, but it takes much fewer resources than starting a contemporary Windows virtual machine. Yes, Wine is an alternative, unless I have to work with specific hardware that does not work well with GNU/Linux systems.

I recently wanted to create a new Virtual Machine with Windows XP, and once I did it, I realized how many things I had to configure.

So I decided to create an .iso image with some tweaks, like more sensible defaults, and a fully automated installation.

There is a bootstrapping issue. nLite is a Windows program, and I’m using Debian as the host system. Since I did not want to install Windows in a virtual machine to personalize my .iso file for installing Windows, I used Wine.

Everything worked without errors (although some dialogs weren’t rendered perfectly), except the process for integrating updates.

Integrate

Service Pack

Since my Windows XP disc already has the latest official service Pack (SP3), I did not select it or test it out.

Hotfixes, Add-ons, and update packs

Updates are not simply copied somewhere appropriate; they are executed. Wine is not compatible enough and some updates lead to crashes. nLite unfortunately does not log which update it did not integrate succesfully, and I did not bother to write them all down.

In a separate session, from a virtual machine, I tried to integrate most, if not all, updates I saved locally with WSUS Offline Update on a CD while it still supported Windows XP, and also added those that where done after support for Windows XP ended a long time ago.

There are a couple of updates that are problematic, so I had to exclude some.

The update I was most interested in is KB968930 🗄️, which adds PowerShell 2.0. This requires at least .net 2.0, which, to my knowledge, cannot be integrated as a hotfix or update pack, so I have integrated it "manually".

Maybe there is a workaround, but again, I do not want to spend too much time on it unless someone has a good suggestion.

PosReady Updates

I tried integrating some PosReady updates at the beginning, as I had them "lying around" near the other update packs. At least one of them caused issues. So I decided to drop them all and install only those that officially targeted Windows XP.

I already went the extra mile of slipstreaming most, if not all, official updates; I’m more than happy with what I have right now.

Other updates

There might be other updates that might be interesting to integrate that I am currently missing.

For example, newer Root Certificates, since some certificates might be too old for navigating the web.

Drivers

I did not try to integrate additional drivers.

Remove Components

I could have skipped this section completely. Even with the current prices, disks are much bigger than those from 2000 and 2009, and risking removing something that I needed after all just to make an installation a couple of MB smaller is not worth it.

Nevertheless, I’ve removed some components: those that do depend on network services that do not exist anymore, and the Windows Tour that starts automatically after installing the OS.

Setup

Unattended

This was, at least for me, the most interesting part.

It is possible to set the Key, User, and Workgroup so that I do not have to enter them during installation. Since the machine is completely offline, I do not really care what the usernames are like, so admin it is for everyone.

Once I’ve set the relevant entries, the installation process is completely automated.

As a bonus, I can also execute commands during the first logon.

I decided to take advantage of it and trimmed down a script I already wrote for automating the setup of a Windows machine. Some things done by my script:

  • install notepad++ and configures it as default editor

  • install 7-Zip and sets it up as the default application for most archive types

  • install windirstat

  • install vcredist2005, vcredist2008, vcredist2010, and vcredist2012. I normally do not need those, but some programs might, and since they do not take too much space…​

  • install .NET 3.5 and the update KB968930, which adds PowerShell 2.0 and requires at least .NET 2.0

  • changes some Explorer settings, for example, to always show the filename extension

  • disable warnings if updates are disabled or no antivirus software is installed

  • tune some other settings according to my usages

Options

The options dialog is the only one that did not render correctly and had some artifacts in Wine. Except for changing "Black background" and "Classic" to "Yes", which can make the installation process faster, I did not make any other changes.

Tweaks

This section is interesting; even if I already change some Windows settings in my script, I decided to enable some "critical" tweaks from here too, like always showing the file extensions.

I’ll never understand why, even with the current version of Windows, this default has not changed, especially considering the security implication.

My session

nLite saves mostly everything in a couple of INI files.

This is the file that was created during my last iteration.

Last Session.ini
[Main]
Env = 1.4.9.3 - 2.0.50727.3643.Microsoft Windows NT 5.1.2600 Service Pack 3
Target = Windows XP Professional SP3 - 5.1.2600.5512 - English (United States)

[Tasks]
Remove Components
Unattended Setup
Hotfixes and Update Packs
Tweaks
Create a Bootable ISO
Options

[Components]
;# Applications #
Internet Games
;# Multimedia #
Music Samples
;# Network #
MSN Explorer
Netmeeting
Windows Messenger
;# Operating System Options #
Blaster/Nachi removal tool
Tour
;# Directories #
DOCS
[BOOT]
SUPPORT
VALUEADD
;# Compatibility #
Compat01
Compat02
Compat03
Compat04
Compat06
Compat07
Compat08
Compat09
Compat11
Compat13
Compat14
Compat15
Compat16

[KeepFiles]
msconfig.exe

[RemoveFiles]
clock.avi
yahoo.bmp
swtchbrd.bmp

[Options]
ClassicSetup
BlackSetupBack
ProfilesDir = "%SystemDrive%\Documents and Settings"
TargetPath = "WINDOWS"
temp_dir = %USERPROFILE%\Local Settings\Temp
AdvTweaks

[Patches]
DoUxTheme

[Services2]

[Tweaks]
Desktop-Internet Explorer icon-Hide
Desktop-My Computer icon-Show
Desktop-My Documents icon-Show
Desktop-My Network Places icon-Show
Desktop-Recycle Bin icon-Show
Explorer-Disable Autorun
Explorer-Disable Prefix: Shortcut to
Explorer-Show extensions of known file-types
Explorer-Show hidden files and folders
Explorer-Show protected operating system files
Internet Explorer-Disable Internet Explorer link creation
Internet Explorer-Disable Market Place bookmark
Internet Explorer-Disable Outlook Express link creation
Internet Explorer-Set Homepage-about:blank
My Computer-Add Control Panel
My Computer-Add Recycle Bin
Performance-Disable Last accessed Timestamp on files
Performance-Disable WBEM logging
Performance-Do not cache thumbnails
Privacy-Disable Driver Update Internet prompt
Privacy-Disable Error Reporting
Privacy-Remove Alexa
Start Menu-Remove Windows Catalog shortcut
Start Menu-Remove Windows Update shortcut
Windows Media Player-Accept Privacy Statement
Windows Media Player-Disable automatic codec download
Windows Media Player-Disable silent acquisition
Windows Media Player-Enhanced privacy settings
Windows Media Player-Remove all context menu entries

[Unattended]
ComputerType = Automatic
HibernationNo
AutoLogon = admin
MaximumDataStorePercentOfDisk = 10
RestorePointLife = 30
DesktopTheme = Default||
AutoUpdates = 4
AutoUDay = 5
AutoUHour = 15
ProgFilesPath = "\Program Files"

[DesktopThemes]
C:\windows\Resources\Themes\Zune.Theme
C:\windows\Resources\Themes\Embedded\Embedded.msstyles
C:\windows\Resources\Themes\Royale\Royale.msstyles
C:\windows\Resources\Themes\Royale Noir\Royale Noir.msstyles

[NetAdapter1]
connname = ""
macaddress = ""
ipaddress = "192.168.0.1"
subnetmask = "255.255.255.0"
defaultgateway = ""
dnsserver1 = ""
dnsserver2 = ""
winsserver = ""
netbiossetting = "0"
ipxnetworknumber = "00000000"
ipxnetworkframetype = "0xFF"

[GuiRunOnce]
C:\setup\setup.cmd

[Drivers]

[Hotfixes]
Y:\nlite\updates\wxp\glb\WindowsXP-KB942288-v3-x86.exe
; install manually after .net 3.5, it adds powershell
;Y:\nlite\updates\wxp\glb\WindowsXP-KB968930-x86-ENG.exe
Y:\nlite\updates\wxp\enu\windows-en-us-kb2564958_65c98e33d275c4410dd2dec71cf39e4e81bf530a.exe
; superseeded by sp2
;Y:\nlite\updates\wxp\enu\windowsxp-kb824151-x86-enu_1e13d4fd702b9d5028429062023bbd7e02d9c714.exe
; superseeded by sp2
;Y:\nlite\updates\wxp\enu\windowsxp-kb841533-x86-enu_755d3599e96f8b8131966683e1cf15c860cde2dd.exe
; superseeded by sp2
;Y:\nlite\updates\wxp\enu\windowsxp-kb873376-x86-enu_5c67061f5227844ef8b5f1eec8596bd2520c542d.exe
; superseeded by sp2
;Y:\nlite\updates\wxp\enu\windowsxp-kb892944-x86-enu_4bdf561e99e401a81737b04f5ce9f2dde640e06f.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb923561-x86-enu_b8aac16b07ca89c7dde4d724c808ff88faa456ec.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb923789-x86-enu_c0b5e28a5c81ac2876216f0a963fdd4b6d478378.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb931836-x86-enu_88800ae7ce66933f34a490ba2e58d51822078c6d.exe
; timezone-superseeded by KB951072-v2, KB955839
;Y:\nlite\updates\wxp\enu\windowsxp-kb933360-x86-enu_234fb8a426837ed633fdd2bfd62a7d7e5402a4e4.exe
; sp3, already part of the iso
;Y:\nlite\updates\wxp\enu\WindowsXP-KB936929-SP3-x86-ENU.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb941569-x86-enu_55e8b619dd436e8be22c381fa8643a58b5f7c2a8.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb942763-x86-enu_6e369d7eee07e16556b489c78c569d6f6c82f379.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb946648-x86-enu_288da0ecf75b20e972ad58dba0a382173b548ec1.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb950762-x86-enu_bfa04c9d2e62b4695d1bb8953486788c8a8c11e4.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb950974-x86-enu_fd840632e13df756e9d1251400e6e659d16a8b27.exe
; timezone-superseeded by KB955839
;Y:\nlite\updates\wxp\enu\windowsxp-kb951072-v2-x86-enu_f10af2d96c1c5d829de686d3380a36de9533c7fb.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb951376-v2-x86-enu_e9b68c5e63acb5786a05b53b4332465de0ebcebd.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb952004-x86-enu_28e11ce4e9083f84c7b9903716904a94dc6b7280.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb952954-x86-enu_0c595b08d25326ffa929efe23e29b5848e7f39ec.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb953155-x86-enu_0d30e7c0ca79f1172d83db0c7e890809836a0b87.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb955839-x86-enu_0446f106b648d38c366c09e9c9016cea5b5732e7.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb956572-x86-enu_a2463f484318332e8319dd931c87b27cf747b2de.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb956844-x86-enu_926002701569eabda17630d8f9cb45d8ced0ab71.exe
; rejected by nlite
;Y:\nlite\updates\wxp\enu\windowsxp-kb958470-x86-enu_887a259c39636eaf1ab9bfec71172203224415cc.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb959426-x86-enu_9bdfabdec1c98057a92503cb00ce6ed623b517c5.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb960803-x86-enu_114aa39cb3e1e42c0f9897c99e697084dbdc656f.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb960859-x86-enu_c1a1e20576bc745a720053357e46be6c2a3f7faa.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb969059-x86-enu_e0bb7f06a55b6fc94b39f75e5d9e7d9b0b3b0c5d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb970483-x86-enu_3b08d6ffcbab056a9665cc6e6460b6a0d1d90f75.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb970653-v3-x86-enu_3a09513cc7f50bd8869b86a65e8873fcdf59badc.exe
; rejected by nlite
;Y:\nlite\updates\wxp\enu\windowsxp-kb971032-x86-enu_23f7ac835ed26257c74a7b1ef5caa6198182cf6c.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb971657-x86-enu_697f5d861910aa051131a58e1af607a79e14e1a9.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb972270-x86-enu_5ae81de178c87a5a40ccb208d3fd762c1c34fbb1.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb973507-x86-enu_b74b10f783998bb7b15f8bc3a7a5a572749fb303.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb973815-x86-enu_1d84219447edee9e6989e740e7fd477360e4059d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb973869-x86-enu_c0679cb2d4c07f35f39ee5d8d7b973c5e4582d34.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb973904-x86-enu_f08c92a67f1bd7f0768eca980d885eb85a91d52c.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb974112-x86-enu_e2e2d805c4dc419d0f7d83652eec5379d2ba8692.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb974318-x86-enu_8612baba6e75a76faee0606cf9f8970824e2f8d3.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb974392-x86-enu_f2acc593bbeb6296b4b921fecb3c71dd93db076c.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb974571-x86-enu_dcca5129a21f3ccbea4609e1bcf7763f07c1883b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb975025-x86-enu_a7cb9fdfedb5e7b464709910afeec4cff61c89f4.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb975254-x86-enu_6b82a2508bcef00663666e24ba54bf135e2f1ac3.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb975467-x86-enu_703673b065074bb9dd7d849f420e52ea0d343f8d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb975560-x86-enu_c57ed328ab8838ecbb6ffea46fa0bcbd76b2cc59.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb975713-x86-enu_8143fc78eac39de3e91e31b0096adecdbe1cdd83.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb976098-v2-x86-enu_9a9fd65b86d37a1615dbcbb71b16274f5edbc3b9.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb976323-x86-enu_1c0194022a930192d7b71d5df406ef3fe43a0b5d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb977816-x86-enu_0a99a4abced5b224ab8fdf5054d5d6cff991e064.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb977914-x86-enu_60a362b77f6e5fb22208b05624d30f817c4bd4a7.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb978338-x86-enu_4d1317a99a8951697a0c1213687199ad89ba6d9d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb978542-x86-enu_11f7b200a2bbb1b053e34b821141e72240c592d8.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb978706-x86-enu_f4e076b3867c2f08b6d258316aa0e11d6822b8d7.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb979306-x86-enu_e02e1719bbe03f1ae294fd995a888e449dd03883.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb979309-x86-enu_b6a3d8953714847d02d614e8fcb5b4171d1029fb.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb979482-x86-enu_e848aac75a3d3361bde4486fd5185ced7b3037b8.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb979687-x86-enu_c42f90a1cdb62f35e29f0a7dc1fc9edebef69628.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb981793-x86-enu_e1363fb1d582b860c3e25b2bbfbc0b7f38a8b44b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb981997-x86-enu_c0c210a40f1e3d801a2b9705b78b540c0e135824.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb982132-x86-enu_1ec5258de785e380d2eb9c8634f64e736d929618.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb982665-x86-enu_3b611460ba349838a9e8eabcbbe4b2ffe2e3b1e7.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2115168-x86-enu_675e6a32a90807671042e4de6b1f10a2fd82b157.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2124261-x86-enu_8c9fb769a98a87da56b6b312a2a31010b1f4d7cf.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2158563-x86-enu_7694e76d6a1d83cd605cb763dd31839ad66d2587.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2229593-x86-enu_745d7b032115820cef735f83660c5e3c870da33b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2290570-x86-enu_6ab9dbb115e5ba8f3cd4f607aedecee86223ced8.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2296011-x86-enu_95ff937b7a8443ddb8ae0579da94690ac3a85d0d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2347290-x86-enu_de6572122c6323cc343a9273ee0d24188b240a32.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2387149-x86-enu_62c37617cb0c9502a135b43a161482928084cbaa.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2393802-x86-enu_317d4fcbb0a230f3462f40ea2be322d5eced5866.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2419632-x86-enu_6dfaf9fe0d89d32d3c28e8245c1fe87d4561af1f.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2423089-x86-enu_94cce8eb153f98affd81951f2123b74f14a59925.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2443105-x86-enu_c6025a43d53129a2f4d0def88d1f1ccaa6c622b2.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2443685-x86-enu_d5ce3060d0317ae2ba8b37f43377004ba3cb5a2b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2478960-x86-enu_56cc4e7eae7362f056ccd946e5e69d1b4a1c1e76.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2479943-x86-enu_0f4fe52f57ff542624050e386ac2b264ea032631.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2481109-x86-enu_357fb75b3178fa715a5e9c209ed6c8cf86899c77.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2483185-x86-enu_8d3deb8249d91112891ff5a847c6debcec1dee84.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2483618-x86-enu_0106682564d6acabcd294dac2d84032bb7798a54.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2485663-x86-enu_e6142de1db2c310632af0badc06392a85f78304d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2491683-x86-enu_d68220a1d4d2ed4a823b0f5e313f19ea45389515.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2506212-x86-enu_8d65ae1e5ccf2a10c9bd1699e316c859005ef685.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2507938-x86-enu_5568319a9f23638b28306ec6c79f14f1c35c7414.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2508429-x86-enu_e0b40d81f2ecc1bad43439a6bd0a9e2a0ab7dd56.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2509553-x86-enu_b7be1af1e39194c02cad8426d3756254a7a5bc7e.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2510581-x86-enu_1ace505ed92dcf4c22f61c4d800c379b48b31319.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2535512-x86-enu_96bcbab3c4ba3b1bb8ee912454b0e36fa8f2944b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2536276-v2-x86-enu_e8a6ac077f11902565cb5ac423df3290862fc953.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2544893-v2-x86-enu_27c268ee84f0b69a6b9efd63bc0989f0d9e3c968.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2566454-x86-enu_334393e8002f9a92618410b7b578c97cbc14905d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2570791-x86-enu_15e0b6be517caa5878f7353a39149bdfb4a3b78d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2570947-x86-enu_62e1630e0f8731279f558ccc977f8f8a2b9cb14e.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2584146-x86-enu_708a4a32c115fdfe3474a22bc113129475361072.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2585542-x86-enu_8812e165246f8a1b68f65330ba5621818d9d348c.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2592799-x86-enu_9295566618f819f675688f8b088743cb21f9eb6a.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2598479-x86-enu_1876be74b01993fd64fdf68e8f19cad78cd878cf.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2603381-x86-enu_f2d782a2715c9ed03ce70ce47975494f95a6b4e7.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2619339-x86-enu_b1bb039422a906a7b32159db286fd827a1781686.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2620712-x86-enu_29f43eb377d0a420d67bd1e4908aa47cef9f079b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2631813-x86-enu_f6154b624398c24f007b66be5c96ac9ead6279d1.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2633952-x86-enu_ecb89af2148c1eef9378fa002e54744570d1db23.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2653956-x86-enu_2fb667e1082bce2589326fcc713f9c2306f70c8d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2655992-x86-enu_148c0a8c097733dec018854373856cc1f1c4eaa5.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2659262-x86-enu_f679467f80cf9c3dbb0a31f558e4a5f77471c27e.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2660649-x86-enu_689f93b51ce8325d1947ae0d40a3d41ceedcb4b0.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2661637-x86-enu_ba52dfa92940b58a752810151ab0d4e74deb48ba.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2676562-x86-enu_6497fbd4ae292d06ff7b32d408196164b7ccd9e2.exe
; warning by nlite, see comment
;Y:\nlite\updates\wxp\enu\windowsxp-kb2686509-x86-enu_fdbb0ff8820e54be0eefc9e4e47ca4f0116d84a6.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2691442-x86-enu_5badc4a8d9dddd74695b2d3c3cd793c029fad257.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2698365-x86-enu_b7e3e61d18de050ee914494dff53f1de868fb5dd.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2705219-v2-x86-enu_5da19122909e6616886e3d35d226fda552ebdc13.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2719985-x86-enu_d33ea68905d7228777d96ba64656b26cb9aee5a2.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2723135-v2-x86-enu_00fce783b936aa2a79715154e5e896fbc25b3f83.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2727528-x86-enu_0a3eac9e820944e76cff5a6c2e8e4b6a6a31ce20.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2756822-x86-enu_17be1bc7bd9e4fa801ed58c9bfae3a31149b335f.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2757638-x86-enu_df96d391e60c5be205071dd64d8c59884e9ae7c6.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2770660-x86-enu_2ea121f18e223eb0610260035e2ded1d785e5629.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2779562-x86-enu_7f9953b89dbc4fb8e8ee4e7205ca527744492382.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2780091-x86-enu_048e2d351378500825a48ec960624dd217604807.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2801109-x86-enu_8dd43999be477ffbb3a75b7d8738100d3c1520a1.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2802968-x86-enu_c0515dbf62a0f679e5cf7d77c054ec717d4a5a8e.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2807986-x86-enu_8cf50640e3fa43fe236c61c31859768795eaa048.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2813345-x86-enu_a87abf527c0b8026208e99f7771478bd82b45c90.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2813347-v2-x86-enu_7f5b07e5464702cdfa24a869d21f55335223069a.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2820917-x86-enu_44b31849d4c3bfbeea9023d68db2ed8537662e0b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2834886-x86-enu_4c6b8f13c24e41e5c9815780d09459f24c14183b.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2835364-x86-enu_b055260207a810f44e7d68c2b93a151d6f8d9691.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2847311-x86-enu_f7d56448ca8e09d96837125424f7058ca7297a71.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2850869-x86-enu_f95a8470be09e5afd4d987a9d89b7ea26b428acf.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2859537-x86-enu_8eb81b4b8339fa12bd4a5ede7ec9e4d225ec209c.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2862152-x86-enu_0457906284ff7fd706d77a69ac337ce7f65c7919.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2862330-x86-enu_00e64588c6eaf60c184d31d65a42ba950b020c28.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2862335-x86-enu_baeaacdc07fa53a6e4a1ef558c0b4638d2541fd4.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2863058-x86-enu_3756d3c719c27a73df20476c67abd43d72ce1134.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2864063-x86-enu_135f76c6e66a127411cf3e406959ca56eae8e551.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2868038-x86-enu_0cc9f04af1cfc59b088f1c426792c7746fdf695f.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2868626-x86-enu_1a00424d2070b57a4d9e2e73e54d90f51bb0562a.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2876217-x86-enu_a662db07022635ce69613fa2819472862efe4531.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2876331-x86-enu_3e44451e40197240c9eaaf2b0275756e205bf5b8.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2879017-x86-enu_e6b354acd732c385254babb1a6a61568bf185b65.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2884256-x86-enu_49b6b431d45d7750f08177a9f58a419141004b48.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2892075-x86-enu_17de2e03645b5d87bd09f161d996cb0a07c289e1.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2893294-x86-enu_f13e5e517b86f5cad62d9e0e6efa1c411efae1ef.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2898715-x86-enu_a5a457cf2bcbf3f0cd73f422b7cc3af5b086d95e.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2900986-x86-enu_0d694f8de9ef0063d06b08985224759abdb7ef9a.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2904266-x86-enu_dbb1b301ba862c02e0b34570e3c78a719144f823.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2909212-x86-enu_c81e835e3a4388ac0901e569f23cd8ef17a69417.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2914368-x86-enu_1d9a306f9e5dd564c8ffdcdb8717c4ae2588db3d.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2916036-x86-enu_e45581340485f6f9a5ded9a73afd51f126c37239.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2922229-x86-enu_0e149634fac7cb51e39d557c60549bea43f027bc.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2929961-x86-enu_fa34fa05e955ffd2ddce10e3a9dda275cd214b06.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2930275-x86-enu_9dd04b8c0bcc2ac895b36f92648ca00de6083157.exe
Y:\nlite\updates\wxp\enu\windowsxp-kb2933528-x86-enu_41b0f6a452d0c6b2275013485a98f16e4f577e37.exe
Y:\windowsxp-kb4012583-x86-custom-enu_36fa3aa9ed1507506cc79e6bb2e4d0fd774dd941.exe
Y:\windowsxp-kb4012598-x86-custom-enu_eceb7d5023bbb23c0dc633e46b9c2f14fa6ee9dd.exe
Y:\windowsxp-kb4500331-x86-custom-enu_d7206aca53552fececf72a3dee93eb2da0421188.exe
Last Session_u.ini
[Personal]
TimeZone = (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
CDKey = "<insert here cd key>"
ComputerName = PC
Organization =
Language = English (United States)
Locale = English (United States)
Keyboard = US
DomainAdmin =
DomainPass =
Expirepassword = 0
JoinDomain =
JoinWorkgroup = WORKGROUP
Owner = user

[Users]
Administrator|||True|Administrators||True|False|True
Guest|||False|Guests||True|False|False
admin|||True|Administrators||False|False|True

I can now take these two .ini files (plus all the updates listed) and create another Windows XP installation disc.

This is what the setup script looked like at a certain point.

setup.cmd
@echo off
set "APPDIR=%SystemDrive%\setup"

rem Install and set up basic applications

start "" /wait "%APPDIR%\npp.7.9.2.Installer.exe" /S
set "EDITOR=C:\Program Files\Notepad++\notepad++.exe"
reg add "HKCR\Unknown\shell\editor\command"  /ve /t REG_SZ /d "\"%EDITOR%\" \"%%1\"" /f >NUL
reg add "HKCR\txtfile\shell\open\command"    /ve /t REG_SZ /d "\"%EDITOR%\" \"%%1\"" /f >NUL
reg add "HKCR\inifile\shell\open\command"    /ve /t REG_SZ /d "\"%EDITOR%\" \"%%1\"" /f >NUL
reg add "HKCR\xmlfile\shell\open\command"    /ve /t REG_SZ /d "\"%EDITOR%\" \"%%1\"" /f >NUL
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\editor.exe" /ve /d "\"%EDITOR%\" /f >NUL
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v EDITOR /t REG_SZ /d "\"%EDITOR%\" /f >NUL

start "" /wait "%APPDIR%\SumatraPDF-3.1.2-install.exe" /S
"%ProgramFiles%\SumatraPDF\SumatraPDF.exe" -register-for-pdf

start "" /wait "%APPDIR%\7z2407.exe" /S
assoc .7z=7-Zip.7z
assoc .zip=7-Zip.zip
assoc .rar=7-Zip.rar
assoc .tar=7-Zip.tar
assoc .gz=7-Zip.gz
assoc .bz2=7-Zip.bz2
assoc .iso=7-Zip.iso
ftype 7-Zip.7z="C:\Program Files\7-Zip\7zFM.exe"  "%%1"
ftype 7-Zip.zip="C:\Program Files\7-Zip\7zFM.exe" "%%1"
ftype 7-Zip.rar="C:\Program Files\7-Zip\7zFM.exe" "%%1"
ftype 7-Zip.tar="C:\Program Files\7-Zip\7zFM.exe" "%%1"
ftype 7-Zip.gz="C:\Program Files\7-Zip\7zFM.exe"  "%%1"
ftype 7-Zip.bz2="C:\Program Files\7-Zip\7zFM.exe" "%%1"
ftype 7-Zip.iso="C:\Program Files\7-Zip\7zFM.exe" "%%1"

start "" /wait "%APPDIR%\ultradefrag-7.1.4.bin.i386.exe" /wait /S /FULL=1 /DISABLE_USAGE_TRACKING=1

start "" /wait "%APPDIR%\windirstat1_1_2_setup.exe" /S

rem .net 3.5 + powershell
start "" /wait "%APPDIR%\dotnetfx35.exe" /lang:ENU /q
start "" /wait "%APPDIR%\WindowsXP-KB968930-x86-ENG.exe" /q

rem mark KB2686509 as installed
rem https://seclists.org/fulldisclosure/2013/Oct/151
reg add "HKLM\SOFTWARE\Microsoft\Updates\Windows XP\SP4\KB2686509" /v Installed /t REG_DWORD /d 1 /f >NUL

rem runtimes
start "" /wait "%APPDIR%\vcredist2005_x86.exe" /q
start "" /wait "%APPDIR%\vcredist2008_x86.exe" /q
start "" /wait "%APPDIR%\vcredist2010_x86.exe" /q
start "" /wait "%APPDIR%\vcredist2012_x86.exe" /q

rem sysinternals

set "ZIP=%APPDIR%\SysinternalsSuite.zip"
set "SEVENZIP=%ProgramFiles%\7-Zip\7z.exe"
set "DEST=%ProgramFiles%"
set "STARTMENU=%ALLUSERSPROFILE%\Start Menu\Programs\Sysinternals"
set "VBS=%TEMP%\createsysinternalslink.vbs"
if not exist "%DEST%" mkdir "%DEST%"
if not exist "%STARTMENU%" mkdir "%STARTMENU%"
"%SEVENZIP%" x "%ZIP%" -o"%DEST%" -y
rem Create a Start Menu shortcut to the installed Sysinternals folder.
> "%VBS%" echo Set shell = CreateObject("WScript.Shell")
>>"%VBS%" echo Set link = shell.CreateShortcut("%STARTMENU%\Sysinternals.lnk")
>>"%VBS%" echo link.TargetPath = "%WINDIR%\explorer.exe"
>>"%VBS%" echo link.Arguments = "%DEST%\SysinternalsSuite"
>>"%VBS%" echo link.WorkingDirectory = "%DEST%\SysinternalsSuite"
>>"%VBS%" echo link.Description = "Sysinternals utilities"
>>"%VBS%" echo link.Save
cscript //nologo "%VBS%"
del "%VBS%"

reg add "HKCU\Software\System Internals" /v EulaAccepted /t REG_DWORD /d 1 /f >NUL
reg add "HKCU\Software\Sysinternals"     /v EulaAccepted /t REG_DWORD /d 1 /f >NUL
reg add "HKLM\Software\System Internals" /v EulaAccepted /t REG_DWORD /d 1 /f >NUL
reg add "HKLM\Software\Sysinternals"     /v EulaAccepted /t REG_DWORD /d 1 /f >NUL


rem Change Windows settings

rem Disable Windows Security Center notifications
reg add "HKLM\SOFTWARE\Microsoft\Security Center" /v AntiVirusDisableNotify /t REG_DWORD /d 1 /f >NUL
reg add "HKLM\SOFTWARE\Microsoft\Security Center" /v UpdatesDisableNotify   /t REG_DWORD /d 1 /f >NUL

rem disable services that depend on internet connection
sc config "wuauserv" start= disabled >NUL
sc stop   "wuauserv" >NUL
sc config "ersvc"    start= disabled >NUL
sc stop   "ersvc"    >NUL
sc config "dhcp"     start= demand >NUL
sc stop   "dhcp"     >NUL
sc config "helpsvc"  start= demand >NUL
sc stop   "helpsvc"  >NUL
sc config "wscsvc"   start= demand >NUL
sc stop   "wscsvc"   >NUL

rem vm settings
powercfg /h off
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 0 /f >NUL
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v  DisableLockWorkstation /t REG_DWORD /d 1 /f >NUL

rem disk usage
fsutil behavior set disable8dot3 1
fsutil behavior set disablelastaccess 1
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v DisableThumbnailCache /t REG_DWORD /d 1 /f >NUL

rem Remove data at the next Windows logon
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v RemoveInstallFiles /t REG_SZ /d "cmd.exe /c rd /s /q \"%APPDIR%\"" /f >NUL

rem autorun
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f >NUL
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 255 /f >NUL

rem add open cmd here
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v DisableUNCCheck /t REG_DWORD /d 1 /f >NUL
reg import "%APPDIR%\open-here.reg"

rem Remove all shortcuts from the current user/All Users desktop
del /f /q "%USERPROFILE%\Desktop\*.lnk" >NUL
del /f /q "%ALLUSERSPROFILE%\Desktop\*.lnk" >NUL

rem clean up
cleanmgr /sagerun:1
del /f /s /q "%TEMP%\*.*" >NUL
for /d %%D in ("%TEMP%\*") do rd /s /q "%%D" >NUL
del /f /s /q "%SystemRoot%\Temp\*.*" >NUL
for /d %%D in ("%SystemRoot%\Temp\*") do rd /s /q "%%D" >NUL

exit /b 0

Why not use an existing improved disc image or "Service Pack 4" from the internet

Most updates are minor fixes or security patches; they do not add new functionalities or improve compatibility.

It does not really matter if I have them installed or not, as my machine is not connected to a network.

So once I have Service Pack 3, with some exceptions (like the already mentioned KB968930 🗄️), most updates are not really relevant, at least for my use case: an air-gapped machine.

Using something not official, since it’s a binary blob, has certain issues.

For example, if the image contains some malware. Otherwise, whether something was changed that some program I want to use relies on.

Some of those "distributions" radically change the appearance of Windows or add "a lot" of programs I’m not interested in.

This is also the reason why I wanted to upload "my recipe". I also left comments on the updates I skipped, and the setup.cmd shows how programs are automatically installed and set up.

This should make it easy to understand what the final image actually contains, if it is appropriate, and eventually change it. Prerequisite are the optional update packs, a official image, and the setup programs.


If you have questions, comments, or found typos, the notes are not clear, or there are some errors; then just contact me.