Build customized Windows installation media using UUP Dump and DISM, including bloatware removal, driver injection, feature configuration, and unattended installation.
Table of Contents#
- Overview
- Building a Custom Windows ISO
- Customizing the Image with DISM
- Creating a Bootable USB
- Unattended Installation
- LTSC Editions
- Troubleshooting
- See Also
- Sources
1. Overview#
Creating a custom Windows image allows you to pre-configure installations with specific drivers, features, updates, and application removals. This is useful for:
- Enterprise deployment - standardized images across an organization
- Bloatware removal - strip pre-installed apps before deployment
- Driver injection - include hardware-specific drivers in the installation media
- Offline updates - slipstream security patches into the image
- Unattended installation - automate the entire setup process
The primary tools involved are:
- UUP Dump - download Windows installation files directly from Microsoft servers
- DISM (Deployment Image Servicing and Management) - mount, modify, and save WIM/ESD images
- Windows SIM (System Image Manager) - create answer files for unattended installations
2. Building a Custom Windows ISO#
Using UUP Dump#
UUP Dump allows you to download the latest Windows Unified Update Platform files and create a custom ISO.
- Visit uupdump.net
- Select the desired Windows version and architecture
- Choose the edition(s) to include (e.g., Pro, Enterprise, LTSC)
- Download the build script package
- Run the script to build the ISO:
# On Windows - run the downloaded script
.\uup_download_windows.cmd# On Linux - install dependencies and run
sudo apt install aria2 cabextract wimtools chntpw genisoimage
chmod +x uup_download_linux.sh
./uup_download_linux.shNote: The ISO will be created in the same directory as the script. Build time depends on your internet connection speed and the number of editions included.
Alternative: Media Creation Tool#
For standard ISOs without customization, use the official Media Creation Tool.
3. Customizing the Image with DISM#
Mount the Install Image#
# Create mount directory
mkdir C:\mount
# List available editions in the WIM
DISM /Get-WimInfo /WimFile:D:\sources\install.wim
# Mount the desired edition (e.g., index 6 = Pro)
DISM /Mount-Wim /WimFile:D:\sources\install.wim /Index:6 /MountDir:C:\mountNote: If the source file is
install.esdinstead ofinstall.wim, export to WIM first:DISM /Export-Image /SourceImageFile:D:\sources\install.esd /SourceIndex:6 /DestinationImageFile:C:\install.wim /Compress:max
Remove Bloatware / Provisioned Apps#
# List provisioned appx packages
DISM /Image:C:\mount /Get-ProvisionedAppxPackages | Select-String "PackageName"
# Remove specific apps (e.g., Xbox, Bing)
DISM /Image:C:\mount /Remove-ProvisionedAppxPackage /PackageName:Microsoft.XboxApp_1.0.0.0_neutral_~_8wekyb3d8bbwe
DISM /Image:C:\mount /Remove-ProvisionedAppxPackage /PackageName:Microsoft.BingWeather_1.0.0.0_neutral_~_8wekyb3d8bbweCommon apps to remove:
| Package Pattern | Description |
|---|---|
Microsoft.Xbox* | Xbox apps and Game Bar |
Microsoft.Bing* | Bing News, Weather, Finance |
Microsoft.GetHelp | Get Help app |
Microsoft.MicrosoftSolitaireCollection | Solitaire games |
Microsoft.People | People app |
Microsoft.WindowsFeedbackHub | Feedback Hub |
Microsoft.ZuneMusic | Groove Music / Media Player legacy |
Clipchamp.Clipchamp | Clipchamp video editor |
Add Drivers#
# Add a single driver
DISM /Image:C:\mount /Add-Driver /Driver:C:\drivers\network.inf
# Add all drivers from a folder recursively
DISM /Image:C:\mount /Add-Driver /Driver:C:\drivers /Recurse
# Verify added drivers
DISM /Image:C:\mount /Get-DriversEnable or Disable Features#
# List available features
DISM /Image:C:\mount /Get-Features
# Enable a feature (e.g., Hyper-V)
DISM /Image:C:\mount /Enable-Feature /FeatureName:Microsoft-Hyper-V-All
# Disable a feature
DISM /Image:C:\mount /Disable-Feature /FeatureName:MediaPlayback
# Enable .NET Framework 3.5 (requires source files)
DISM /Image:C:\mount /Enable-Feature /FeatureName:NetFx3 /Source:D:\sources\sxsInject Updates#
# Add an update package (.msu or .cab)
DISM /Image:C:\mount /Add-Package /PackagePath:C:\updates\update.msu
# Add all updates from a folder
DISM /Image:C:\mount /Add-Package /PackagePath:C:\updates
# Verify installed packages
DISM /Image:C:\mount /Get-PackagesApply Registry Modifications#
# Load the offline registry hive
reg load HKLM\OfflineSoftware C:\mount\Windows\System32\config\SOFTWARE
# Make changes
reg add "HKLM\OfflineSoftware\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 1
# Unload the hive
reg unload HKLM\OfflineSoftwareUnmount and Save#
# Save changes and unmount
DISM /Unmount-Wim /MountDir:C:\mount /Commit
# Or discard changes
DISM /Unmount-Wim /MountDir:C:\mount /DiscardOptimize and Export#
# Clean up the image to reduce size
DISM /Image:C:\mount /Cleanup-Image /StartComponentCleanup /ResetBase
# Export to a new WIM with maximum compression
DISM /Export-Image /SourceImageFile:C:\install.wim /SourceIndex:1 /DestinationImageFile:C:\install-optimized.wim /Compress:max4. Creating a Bootable USB#
# Using built-in diskpart (run as Administrator)
diskpart
list disk
select disk <number>
clean
create partition primary
format fs=ntfs quick
assign
active
exit
# Copy ISO contents to the USB driveNote: For UEFI boot, format the USB as FAT32 instead of NTFS. For images larger than 4 GB, split the
install.wimfile:
DISM /Split-Image /ImageFile:install.wim /SWMFile:install.swm /FileSize:3800Using Rufus (Recommended for Simplicity)#
Rufus is a free tool that handles partition scheme (MBR/GPT), filesystem, and file splitting automatically. Select your ISO and target USB drive, then click Start.
5. Unattended Installation#
Place an autounattend.xml file in the root of the ISO or USB to automate the installation.
Minimal Example#
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE"
processorArchitecture="amd64"
publicKeyToken="31bf3856ad364e35"
language="neutral"
versionScope="nonSxS">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<InputLocale>en-US</InputLocale>
<UILanguage>en-US</UILanguage>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup"
processorArchitecture="amd64"
publicKeyToken="31bf3856ad364e35"
language="neutral"
versionScope="nonSxS">
<OOBE>
<SkipMachineOOBE>true</SkipMachineOOBE>
<SkipUserOOBE>true</SkipUserOOBE>
</OOBE>
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Name>Admin</Name>
<Group>Administrators</Group>
<Password>
<Value><!-- base64 encoded password --></Value>
<PlainText>false</PlainText>
</Password>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
</component>
</settings>
</unattend>Key Answer File Sections#
| Pass | Purpose |
|---|---|
windowsPE | Language, disk partitioning, image selection |
offlineServicing | Apply packages and drivers to the offline image |
generalize | Prepare image for deployment to multiple machines |
specialize | Computer name, domain join, network configuration |
oobeSystem | User accounts, OOBE skip, privacy settings |
Use Windows System Image Manager (SIM) from the Windows ADK to create and validate answer files.
6. LTSC Editions#
Windows Long-Term Servicing Channel (LTSC) editions are designed for systems that require long-term stability and minimal feature changes.
Key characteristics:
- No feature updates - receives only security and quality updates
- Support lifecycle - 5 years mainstream + 5 years extended (IoT LTSC: 10 years)
- No bundled apps - no Microsoft Store, Edge, Cortana, or other consumer apps
- Available editions - Enterprise LTSC, IoT Enterprise LTSC
- Not available via retail or OEM channels; requires Volume Licensing
LTSC is ideal for:
- Kiosks and point-of-sale systems
- Medical devices and industrial controllers
- Environments where feature updates are disruptive
Note: LTSC is not recommended for general-purpose workstations. Microsoft Office support may be limited on LTSC editions.
Troubleshooting#
| Issue | Cause | Solution |
|---|---|---|
| DISM error 0x800f081e during mount | WIM file is read-only or in use | Copy WIM to a writable location; ensure no other DISM operations are running |
| Mount fails with "directory is not empty" | Previous mount was not cleaned up | Run DISM /Cleanup-Wim then retry |
| DISM error 0x800f0825 (corruption) | WIM file corrupted during download or copy | Re-download the WIM; verify hash if available |
| Add-Package fails with "not applicable" | Update does not match the image version/arch | Verify the update matches the image's build number and architecture |
| Unmount hangs or fails | Explorer or antivirus has files locked in mount dir | Close all Explorer windows and File Manager handles; disable real-time AV scanning on mount dir |
| install.wim too large for FAT32 USB | File exceeds 4 GB FAT32 limit | Split with DISM /Split-Image or format USB as NTFS (BIOS boot) |
| autounattend.xml not detected | File not in root of USB or incorrect encoding | Ensure file is in the root directory; save as UTF-8 with BOM |
| ESD to WIM export fails | Insufficient disk space | Ensure at least 2x the ESD file size is available as free space |
| Features fail to enable | Missing source files (e.g., .NET 3.5) | Use /Source flag pointing to \sources\sxs on the installation media |