I'd like to install a WinPE-based Windows 10 system on an internal hard drive as an emergency system, for example Sergei Strelec's Win10PE, Hiren’s BootCD PE, Win10XPE or similar.
However, I'd like it to be persistent, i.e. not boot from RAM and lose all changes made after shutdown. This way, I'd be able to install programs, drivers etc. to that WinPE system.
It is somewhat similar as described here with respect to a Linux system. Other than there however, I want to install the system on a hard drive.
How do I go about to make such an installation, is there any tool available?
I found this, but am not sure if this is what I'm trying to do -- or whether there shouldn't be an easier way.
192 Answers
Okay, somehow this is dead-easy, once you get the hang of it, and using the right tools.
There is DISM++, a truly awesome universal deployment tool that can directly "apply" (i.e. install) a bootable system from an image file to a hard drive:
For example, using a .wim file from a bootable WinPE USB stick. I tried this with Sergei Strelec's Win10PE system, and it instantly worked -- after making the SSD (where I installed the WinPE to using DISM++) bootable with EasyBCD. The latter should not even be necessary because DISM++ should be able to do this itself, but for some reason it didn't in my case.
In other words, Dism++ allows going directly from a WinPE's .wim image to the flat-installed bootable HD system without having to boot the WinPE into RAM first and then pulling an image from the RAM drive as described here; same goes for bootable ISO images like for example all sorts of Windows installation disk images.
Anyway, Sergei Strelec's WinPE then booted straight from the hard drive, assigning itself the X: drive letter, however not to the usual RAM drive, but to the hard drive it was installed to.
I then installed a couple of drivers, for example for a Wifi card which instantly worked. Unfortunately, the system however wouldn't accept GPU drivers. Also, it wouldn't reboot afterwards but give a bluescreen. Anyway, proof of concept almost complete here.
Then, using the same approach ("Apply Image" by DISM++), I installed a Win7 ISO directly on that internal SSD, going from Dism++'s install command to a running Windows 7 in like five minutes. No need for EasyBCD here, DISM++ does it all by itself.
Similar with Windows 11. From clicking "Apply Image" in DISM++ to a running Win11 system in about five minutes.
3To apply a pre-built WinPE boot.wim/winre.wim to a partition:
- Ensure correct image [index] is being applied:
Dism /Get-ImageInfo /ImageFile:"Z:\boot.wim" - Apply image:
Dism /Apply-Image /ImageFile:"Z:\boot.wim" /Index:1 /ApplyDir:"Y:" /CheckIntegrity /Verify - Add a boot entry for WinPE to the BCD store via:
BcdEdit
orBootRec /RebuildBCDwhile booted to WinPE
Create WinPE Image
- Build your own (see below)
(often more storage efficient and doesn't add significant time) - Customize an existing
Recovery\WindowsRE\winre.wim
(WinRE is WinPE with two required OCs:WinPE-Rejuv&WinPE-SRT) - Create one using WinPESE, which creates a normal Windows GUI within WinPE
PreReqs for Building/Customizing WinPE:
- Install Windows ADK and WinPE files:
- Update the system
PATH:+R →
SysDm.cpl→ OK- Advanced → Environment Variables... → System variables →
Path→ Edit → New:# Update paths accordingly if not using Win10 or an x64 OS version: C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\BCDBoot C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\DISM C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Oscdimg C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\WSIM C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment - OK → OK → OK
- Advanced → Environment Variables... → System variables →
- Open an Admin terminal:
+R →
powershell→ Ctrl+Shift+OK
Build WinPE Filesystem
Required:
- Mount WinPE boot image:
# Load ADK variables: Cmd /K "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\DandISetEnv.bat" # Copy WinPE files to working directory C:\WinPE: CopyPE amd64 "C:\WinPE" # Mount WinPE WIM: Dism /Mount-Image /ImageFile:"C:\WinPE\media\sources\boot.wim" /Index:1 /MountDir:"C:\WinPE\mount" - Add WinPE Optional Components:
The following are the minimum I recommend:# Create OCs directory link in working directory C:\WinPE: MkLink /J "C:\WinPE\OCs" "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs # Add OCs: (OC and language CABs required for each OC) Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\<name>.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\<name>_en-us.cab"
(dependencies exist, add in the order listed)- PreReqs:
WinPE-WMI.cab,WinPE-NetFx.cab,WinPE-Scripting.cab- Filesystem:
WinPE-EnhancedStorage.cab,WinPE-FMAPI,WinPE-SecureStartup - Networking:
WinPE-Dot3Svc.cab,WinPE-PPPoE,WinPE-RNDIS.cab,WinPE-WDS-Tools.cab,WinPE-WiFi-Package.cab - PowerShell:
WinPE-PowerShell.cab,WinPE-DismCmdlets.cab,WinPE-PlatformID,WinPE-SecureBootCmdlets.cab,WinPE-StorageWMI - Recovery:
WinPE-Rejuv.cab,WinPE-SRT.cab,WinPE-WinReCfg - Setup:
WinPE-Setup
Depending on use-case:WinPE-Setup-Client.cab,WinPE-Setup-Server.cab
Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\WinPE-WMI.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\WinPE-WMI_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\WinPE-NetFx.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\WinPE-NetFx_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\WinPE-Scripting.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\WinPE-Scripting_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\WinPE-EnhancedStorage.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\WinPE-EnhancedStorage_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\WinPE-FMAPI.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\WinPE-FMAPI_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\WinPE-SecureStartup.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\WinPE-SecureStartup_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\WinPE-Dot3Svc.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\WinPE-Dot3Svc_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-pppoe.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-pppoe_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-rndis.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-rndis_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-wds-tools.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-wds-tools_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-wifi-package.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-wifi-package_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-powershell.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-powershell_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-dismcmdlets.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-dismcmdlets_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-platformid.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-platformid_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-securebootcmdlets.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-securebootcmdlets_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-storagewmi.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-storagewmi_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-rejuv.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-rejuv_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-srt.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-srt_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-winrecfg.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-winrecfg_en-us.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\winpe-setup.cab" Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\OCs\en-us\winpe-setup_en-us.cab" - Filesystem:
- PreReqs:
- Set WinPE default temp space to 512MB: (default: 32MB)
Dism /Set-ScratchSpace:512 /Image:"C:\WinPE\mount"
- Mount WinPE boot image:
- Optional - Add custom:
- Drivers: (Network drivers)
Dism /Add-Driver /Image:"C:\WinPE\mount" /Driver:"C:\Path\to\driver.inf" - Files/directories: Copy to
C:\WinPE\mount- QDir Portable provides an Explorer-like GUI with advanced functionality and is highly customizable via its
Q-Dir.ini - Enable to view hidden files in WinPE's
SYSTEMRegistry hive:# Load WinPE SYSTEM hive: Reg Load HKLM\WinPE "C:\WinPE\mount\Windows\System32\config\SYSTEM" # Show hidden files: Reg Add HKLM\WinPE\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v Hidden /t REG_DWORD /d 1 Reg Add HKLM\WinPE\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowSuperHidden /t REG_DWORD /d 1 # Show file extensions: Reg Add HKLM\WinPE\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v HideFileExt /t REG_DWORD /d 0 # Unload Hive: Reg Unload HKLM\WinPE
- QDir Portable provides an Explorer-like GUI with advanced functionality and is highly customizable via its
- Startup scripts to:
C:\WinPE\mount\Windows\System32\Startnet.cmd- Some settings can be managed via an answer file [
C:\WinPE\mount\Windows\Panther\unattend.xml], such as firewall, network, and display settings
- Some settings can be managed via an answer file [
- Startup apps (such as QDir) to:
C:\WinPE\mount\Windows\System32\Winpeshl.ini - Background:
- Change permissions of
C:\WinPE\mount\Windows\System32\winpe.jpg:# Change ownership to the Administrators group: TakeOwn /A /F "C:\WinPE\mount\Windows\System32\winpe.jpg" # Give Administrators group Full permissions: Icacls "C:\WinPE\mount\Windows\System32\winpe.jpg" /SetOwner Administrators - Replace
winpe.jpgwith a custom.jpg
- Change permissions of
- Power Scheme: set to Performance by adding to
C:\WinPE\mount\Windows\System32\startnet.cmd:powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
- Drivers: (Network drivers)
- If needed, apply any
.msuupdates to WinPE from the Microsoft Update Catalog:# Add update package: Dism /Add-Package /Image:"C:\WinPE\mount" /PackagePath:"C:\WinPE\windows10.0-kbxxxxx.msu" # Lock in the update: Dism /Cleanup-Image /Image:"C:\WinPE\mount\Windows" /StartComponentCleanup /ResetBase - Commit changes, unmount, and export image:
# Optimize: Dism /Cleanup-Image /Image:"C:\WinPE\mount" /StartComponentCleanup /ResetBase # Unmount: Dism /Unmount-Image /MountDir:"C:\WinPE\mount" /Commit # Export: Dism /Export-Image /SourceImageFile:"C:\WinPE\media\sources\boot.wim" /SourceIndex:1 /DestinationImageFile:"C:\WinPE\WinPE_Custom.wim" /DestinationName:"Customized WinPE & Includes: QDir, Show Hidden Files" /Compress:Max /Bootable /CheckIntegrity # Replace original: Del "C:\WinPE\media\sources\boot.wim" Copy "C:\WinPE\WinPE_Custom.wim" "C:\WinPE\media\sources\boot.wim" - Apply WinPE image via
Dismor create boot media viaMakeWinPEMedia:- Partition:
Dism /Apply-Image /ImageFile:"C:\WinPE\media\sources\boot.wim" /Index:1 /ApplyDir:"Y:" /CheckIntegrity /Verify - ISO: (via
OsCdImg)MakeWinPEMedia /Iso "C:\WinPE" "C:\WinPE\WinPE.iso" - USB:
MakeWinPEMedia /Ufd "C:\WinPE" F: - WinRE Replacement: (Windows Recovery Environment)
Required:WinPE-Rejuv&WinPE-SRT- Mount WinRE partition:
DiskPart→Lis Vol→Sel Vol #→Assign Letter=Z→Exit - Configure WinRE: [
ReAgentC]# Disable WinRE: ReAgentC /Disable # Copy modified WinPE WIM to Recovery partition: Del "Z:\Recovery\WindowsRE\WinRE.wim" Copy "C:\WinPE\media\sources\boot.wim" "Z:\Recovery\WindowsRE\WinRE.wim" # Set WinRE Path: ReAgentC /SetREimage /Path "Z:\Recovery\WindowsRE" # Enable WinRE: ReAgentC /Enable # Verify: ReAgentC /Info - Unmount WinRE partition:
DiskPart→Sel Vol Z→Remove→Exit
- Mount WinRE partition:
- Partition: