mirror of
https://github.com/ChrisTitusTech/winutil
synced 2026-02-05 23:40:10 +00:00
Compare commits
9 Commits
f59598cf07
...
26.01.15
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa719b49bf | ||
|
|
e9a6cd32d8 | ||
|
|
b02c7f3eab | ||
|
|
eb29dfced8 | ||
|
|
f9b01fdc81 | ||
|
|
61a80e270d | ||
|
|
a31c9cb235 | ||
|
|
2587a98848 | ||
|
|
a5cf3a2ba7 |
@@ -39,9 +39,6 @@ If you have Issues, refer to [Known Issues](https://winutil.christitus.com/known
|
|||||||
|
|
||||||
## 🎓 Documentation
|
## 🎓 Documentation
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> To contribute to the documentation, please visit [WinUtil Docs Repo](https://github.com/Chris-Titus-Docs/winutil-docs) for more info.
|
|
||||||
|
|
||||||
### [WinUtil Official Documentation](https://winutil.christitus.com/)
|
### [WinUtil Official Documentation](https://winutil.christitus.com/)
|
||||||
|
|
||||||
### [YouTube Tutorial](https://www.youtube.com/watch?v=6UQZ5oQg8XA)
|
### [YouTube Tutorial](https://www.youtube.com/watch?v=6UQZ5oQg8XA)
|
||||||
@@ -79,7 +76,7 @@ You'll see a new file named `winutil.ps1`, which's created by `Compile.ps1` scri
|
|||||||
|
|
||||||
These are the sponsors that help keep this project alive with monthly contributions.
|
These are the sponsors that help keep this project alive with monthly contributions.
|
||||||
|
|
||||||
<!-- sponsors --><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/quaszi"><img src="https://github.com/quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/TaNorbs"><img src="https://github.com/TaNorbs.png" width="60px" alt="User avatar: Norbs" /></a><!-- sponsors -->
|
<!-- sponsors --><a href="https://github.com/markamos"><img src="https://github.com/markamos.png" width="60px" alt="User avatar: Mark Amos" /></a><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/KenichiQaz"><img src="https://github.com/KenichiQaz.png" width="60px" alt="User avatar: Stefan" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/quaszi"><img src="https://github.com/quaszi.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/TaNorbs"><img src="https://github.com/TaNorbs.png" width="60px" alt="User avatar: Norbs" /></a><a href="https://github.com/andrewpayne68"><img src="https://github.com/andrewpayne68.png" width="60px" alt="User avatar: Andrew P" /></a><!-- sponsors -->
|
||||||
|
|
||||||
## 🏅 Thanks to all Contributors
|
## 🏅 Thanks to all Contributors
|
||||||
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
|
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
"WPFTweaksActivity",
|
"WPFTweaksActivity",
|
||||||
"WPFTweaksConsumerFeatures",
|
"WPFTweaksConsumerFeatures",
|
||||||
"WPFTweaksDisableExplorerAutoDiscovery",
|
"WPFTweaksDisableExplorerAutoDiscovery",
|
||||||
|
"WPFTweaksWPBT",
|
||||||
"WPFTweaksDVR",
|
"WPFTweaksDVR",
|
||||||
"WPFTweaksLocation",
|
"WPFTweaksLocation",
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
@@ -16,6 +17,7 @@
|
|||||||
"Minimal": [
|
"Minimal": [
|
||||||
"WPFTweaksConsumerFeatures",
|
"WPFTweaksConsumerFeatures",
|
||||||
"WPFTweaksDisableExplorerAutoDiscovery",
|
"WPFTweaksDisableExplorerAutoDiscovery",
|
||||||
|
"WPFTweaksWPBT",
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
"WPFTweaksTelemetry"
|
"WPFTweaksTelemetry"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1785,13 +1785,6 @@
|
|||||||
"Value": "0",
|
"Value": "0",
|
||||||
"Type": "DWord"
|
"Type": "DWord"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
|
||||||
"OriginalValue": "1",
|
|
||||||
"Name": "TaskbarDa",
|
|
||||||
"Value": "0",
|
|
||||||
"Type": "DWord"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
||||||
"OriginalValue": "1",
|
"OriginalValue": "1",
|
||||||
@@ -2048,6 +2041,12 @@
|
|||||||
Write-Host \"Remove Copilot\"
|
Write-Host \"Remove Copilot\"
|
||||||
Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers
|
Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers
|
||||||
Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers
|
Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers
|
||||||
|
|
||||||
|
$Appx = (Get-AppxPackage MicrosoftWindows.Client.CoreAI).PackageFullName
|
||||||
|
$Sid = (Get-LocalUser $Env:UserName).Sid.Value
|
||||||
|
|
||||||
|
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force
|
||||||
|
Remove-AppxPackage $Appx
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"UndoScript": [
|
"UndoScript": [
|
||||||
@@ -2061,9 +2060,9 @@
|
|||||||
"WPFTweaksWPBT": {
|
"WPFTweaksWPBT": {
|
||||||
"Content": "Disable Windows Platform Binary Table (WPBT)",
|
"Content": "Disable Windows Platform Binary Table (WPBT)",
|
||||||
"Description": "If enabled then allows your computer vendor to execute a program each time it boots. It enables computer vendors to force install anti-theft software, software drivers, or a software program conveniently. This could also be a security risk.",
|
"Description": "If enabled then allows your computer vendor to execute a program each time it boots. It enables computer vendors to force install anti-theft software, software drivers, or a software program conveniently. This could also be a security risk.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Order": "a025_",
|
"Order": "a005_",
|
||||||
"registry": [
|
"registry": [
|
||||||
{
|
{
|
||||||
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager",
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager",
|
||||||
@@ -2827,25 +2826,6 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskview"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskview"
|
||||||
},
|
},
|
||||||
"WPFToggleTaskbarWidgets": {
|
|
||||||
"Content": "Widgets Button in Taskbar",
|
|
||||||
"Description": "If Enabled then Widgets Button in Taskbar will be shown.",
|
|
||||||
"category": "Customize Preferences",
|
|
||||||
"panel": "2",
|
|
||||||
"Order": "a204_",
|
|
||||||
"Type": "Toggle",
|
|
||||||
"registry": [
|
|
||||||
{
|
|
||||||
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
|
||||||
"Name": "TaskbarDa",
|
|
||||||
"Value": "1",
|
|
||||||
"OriginalValue": "0",
|
|
||||||
"DefaultState": "true",
|
|
||||||
"Type": "DWord"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbarwidgets"
|
|
||||||
},
|
|
||||||
"WPFToggleTaskbarAlignment": {
|
"WPFToggleTaskbarAlignment": {
|
||||||
"Content": "Center Taskbar Items",
|
"Content": "Center Taskbar Items",
|
||||||
"Description": "[Windows 11] If Enabled then the Taskbar Items will be shown on the Center, otherwise the Taskbar Items will be shown on the Left.",
|
"Description": "[Windows 11] If Enabled then the Taskbar Items will be shown on the Center, otherwise the Taskbar Items will be shown on the Left.",
|
||||||
|
|||||||
@@ -1,23 +1,35 @@
|
|||||||
|
---
|
||||||
|
title: Developer Reference
|
||||||
|
weight: 3
|
||||||
|
---
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> This section contains technical documentation for developers. For end-user documentation, see the [User Guide](../userguide/).
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
- [Architecture & Design](architecture/) - Code structure, data flow, and how Winutil works internally
|
||||||
|
|
||||||
## Tweaks
|
## Tweaks
|
||||||
|
|
||||||
### Essential Tweaks
|
### Essential Tweaks
|
||||||
|
|
||||||
- [Create Restore Point](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/RestorePoint.md)
|
- [Create Restore Point](tweaks/essential-tweaks/restorepoint/)
|
||||||
- [Debloat Edge](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/EdgeDebloat.md)
|
- [Debloat Edge](tweaks/essential-tweaks/edgedebloat/)
|
||||||
- [Delete Temporary Files](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/DeleteTempFiles.md)
|
- [Delete Temporary Files](tweaks/essential-tweaks/deletetempfiles/)
|
||||||
- [Disable Activity History](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/Activity.md)
|
- [Disable Activity History](tweaks/essential-tweaks/activity/)
|
||||||
- [Disable ConsumerFeatures](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/ConsumerFeatures.md)
|
- [Disable ConsumerFeatures](tweaks/essential-tweaks/consumerfeatures/)
|
||||||
- [Disable GameDVR](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/GameDVR.md)
|
- [Disable GameDVR](tweaks/essential-tweaks/gamedvr/)
|
||||||
- [Disable Hibernation](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/Hibernation.md)
|
- [Disable Hibernation](tweaks/essential-tweaks/hibernation/)
|
||||||
- [Disable Location Tracking](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/Location.md)
|
- [Disable Location Tracking](tweaks/essential-tweaks/location/)
|
||||||
- [Disable Powershell 7 Telemetry](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/Powershell7Tele.md)
|
- [Disable Powershell 7 Telemetry](tweaks/essential-tweaks/powershell7tele/)
|
||||||
- [Disable Storage Sense](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/Storage.md)
|
- [Disable Storage Sense](tweaks/essential-tweaks/storage/)
|
||||||
- [Disable Telemetry](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/Telemetry.md)
|
- [Disable Telemetry](tweaks/essential-tweaks/telemetry/)
|
||||||
- [Enable End Task With Right Click](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/EndTaskOnTaskbar.md)
|
- [Enable End Task With Right Click](tweaks/essential-tweaks/endtaskontaskbar/)
|
||||||
- [Prefer IPv4 over IPv6](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/IPv46.md)
|
- [Prefer IPv4 over IPv6](tweaks/essential-tweaks/ipv46/)
|
||||||
- [Run Disk Cleanup](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/DiskCleanup.md)
|
- [Run Disk Cleanup](tweaks/essential-tweaks/diskcleanup/)
|
||||||
- [Set Hibernation as default (good for laptops)](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/LaptopHibernation.md)
|
- [Set Hibernation as default (good for laptops)](tweaks/essential-tweaks/laptophibernation/)
|
||||||
- [Set Services to Manual](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Essential-Tweaks/Services.md)
|
- [Set Services to Manual](tweaks/essential-tweaks/services/)
|
||||||
|
|
||||||
### Advanced Tweaks (CAUTION)
|
### Advanced Tweaks (CAUTION)
|
||||||
|
|
||||||
@@ -39,57 +51,57 @@
|
|||||||
|
|
||||||
### Customize Preferences
|
### Customize Preferences
|
||||||
|
|
||||||
- [Bing Search in Start Menu](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/BingSearch.md)
|
- [Bing Search in Start Menu](tweaks/customize-preferences/bingsearch/)
|
||||||
- [Center Taskbar Items](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/TaskbarAlignment.md)
|
- [Center Taskbar Items](tweaks/customize-preferences/taskbaralignment/)
|
||||||
- [Dark Theme for Windows](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/DarkMode.md)
|
- [Dark Theme for Windows](tweaks/customize-preferences/darkmode/)
|
||||||
- [Detailed BSoD](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/DetailedBSoD.md)
|
- [Detailed BSoD](tweaks/customize-preferences/detailedbsod/)
|
||||||
- [Mouse Acceleration](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/MouseAcceleration.md)
|
- [Mouse Acceleration](tweaks/customize-preferences/mouseacceleration/)
|
||||||
- [NumLock on Startup](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/NumLock.md)
|
- [NumLock on Startup](tweaks/customize-preferences/numlock/)
|
||||||
- [Search Button in Taskbar](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/TaskbarSearch.md)
|
- [Search Button in Taskbar](tweaks/customize-preferences/taskbarsearch/)
|
||||||
- [Show File Extensions](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/ShowExt.md)
|
- [Show File Extensions](tweaks/customize-preferences/showext/)
|
||||||
- [Show Hidden Files](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/HiddenFiles.md)
|
- [Show Hidden Files](tweaks/customize-preferences/hiddenfiles/)
|
||||||
- [Snap Assist Flyout](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/SnapFlyout.md)
|
- [Snap Assist Flyout](tweaks/customize-preferences/snapflyout/)
|
||||||
- [Snap Assist Suggestion](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/SnapSuggestion.md)
|
- [Snap Assist Suggestion](tweaks/customize-preferences/snapsuggestion/)
|
||||||
- [Snap Window](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/SnapWindow.md)
|
- [Snap Window](tweaks/customize-preferences/snapwindow/)
|
||||||
- [Sticky Keys](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/StickyKeys.md)
|
- [Sticky Keys](tweaks/customize-preferences/stickykeys/)
|
||||||
- [Task View Button in Taskbar](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/TaskView.md)
|
- [Task View Button in Taskbar](tweaks/customize-preferences/taskview/)
|
||||||
- [Verbose Messages During Logon](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/VerboseLogon.md)
|
- [Verbose Messages During Logon](tweaks/customize-preferences/verboselogon/)
|
||||||
- [Widgets Button in Taskbar](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Customize-Preferences/TaskbarWidgets.md)
|
- [Widgets Button in Taskbar](tweaks/customize-preferences/taskbarwidgets/)
|
||||||
|
|
||||||
### Performance Plans
|
### Performance Plans
|
||||||
|
|
||||||
- [Add and Remove Ultimate Performance Profile](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/tweaks/Performance-Plans/Profile.md)
|
- [Add and Remove Ultimate Performance Profile](tweaks/performance-plans/profile/)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
|
|
||||||
- [Remove Adobe Creative Cloud](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Fixes/RunAdobeCCCleanerTool.md)
|
- [Remove Adobe Creative Cloud](features/fixes/runadobecccl cleanertool/)
|
||||||
- [Reset Network](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Fixes/Network.md)
|
- [Reset Network](features/fixes/network/)
|
||||||
- [Reset Windows Update](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Fixes/Update.md)
|
- [Reset Windows Update](features/fixes/update/)
|
||||||
- [Set Up Autologin](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Fixes/Autologin.md)
|
- [Set Up Autologin](features/fixes/autologin/)
|
||||||
- [System Corruption Scan](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Fixes/CorruptionScan.md)
|
- [System Corruption Scan](features/fixes/corruptionscan/)
|
||||||
- [WinGet Reinstall](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Fixes/Winget.md)
|
- [WinGet Reinstall](features/fixes/winget/)
|
||||||
|
|
||||||
### Legacy Windows Panels
|
### Legacy Windows Panels
|
||||||
|
|
||||||
- [Control Panel](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/control.md)
|
- [Control Panel](features/legacy-windows-panels/control/)
|
||||||
- [Network Connections](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/network.md)
|
- [Network Connections](features/legacy-windows-panels/network/)
|
||||||
- [Power Panel](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/power.md)
|
- [Power Panel](features/legacy-windows-panels/power/)
|
||||||
- [Printer Settings](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/printer.md)
|
- [Printer Settings](features/legacy-windows-panels/printer/)
|
||||||
- [Region](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/region.md)
|
- [Region](features/legacy-windows-panels/region/)
|
||||||
- [Sound Settings](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/sound.md)
|
- [Sound Settings](features/legacy-windows-panels/sound/)
|
||||||
- [System Properties](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/system.md)
|
- [System Properties](features/legacy-windows-panels/system/)
|
||||||
- [User Accounts](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Legacy-Windows-Panels/user.md)
|
- [User Accounts](features/legacy-windows-panels/user/)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
- [All .Net Framework (2,3,4)](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/dotnet.md)
|
- [All .Net Framework (2,3,4)](features/features/dotnet/)
|
||||||
- [Disable Legacy F8 Boot Recovery](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/DisableLegacyRecovery.md)
|
- [Disable Legacy F8 Boot Recovery](features/features/disablelegacyrecovery/)
|
||||||
- [Enable Legacy F8 Boot Recovery](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/EnableLegacyRecovery.md)
|
- [Enable Legacy F8 Boot Recovery](features/features/enablelegacyrecovery/)
|
||||||
- [Enable Daily Registry Backup Task 12.30am](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/RegBackup.md)
|
- [Enable Daily Registry Backup Task 12.30am](features/features/regbackup/)
|
||||||
- [HyperV Virtualization](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/hyperv.md)
|
- [HyperV Virtualization](features/features/hyperv/)
|
||||||
- [Legacy Media (WMP, DirectPlay)](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/legacymedia.md)
|
- [Legacy Media (WMP, DirectPlay)](features/features/legacymedia/)
|
||||||
- [NFS - Network File System](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/nfs.md)
|
- [NFS - Network File System](features/features/nfs/)
|
||||||
- [Windows Sandbox](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/Sandbox.md)
|
- [Windows Sandbox](features/features/sandbox/)
|
||||||
- [Windows Subsystem for Linux](https://github.com/ChrisTitusTech/winutil/blob/main/docs/content/dev/features/Features/wsl.md)
|
- [Windows Subsystem for Linux](features/features/wsl/)
|
||||||
|
|||||||
550
docs/content/dev/architecture.md
Normal file
550
docs/content/dev/architecture.md
Normal file
@@ -0,0 +1,550 @@
|
|||||||
|
---
|
||||||
|
title: Architecture & Design
|
||||||
|
weight: 1
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Winutil is a PowerShell-based Windows utility with a WPF (Windows Presentation Foundation) GUI. This document explains the architecture, code structure, and how different components work together.
|
||||||
|
|
||||||
|
## High-Level Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ Winutil GUI │
|
||||||
|
│ (WPF XAML Interface) │
|
||||||
|
└──────────────────┬──────────────────────────────────┘
|
||||||
|
│
|
||||||
|
┌─────────┴─────────┐
|
||||||
|
│ │
|
||||||
|
┌────────▼──────┐ ┌───────▼────────┐
|
||||||
|
│ Public APIs │ │ Private APIs │
|
||||||
|
│ (User-facing)│ │ (Internal) │
|
||||||
|
└───────┬───────┘ └───────┬────────┘
|
||||||
|
│ │
|
||||||
|
└────────┬──────────┘
|
||||||
|
│
|
||||||
|
┌────────────▼────────────┐
|
||||||
|
│ Configuration Files │
|
||||||
|
│ (JSON definitions) │
|
||||||
|
└────────────┬────────────┘
|
||||||
|
│
|
||||||
|
┌────────────▼────────────┐
|
||||||
|
│ External Tools │
|
||||||
|
│ (WinGet, Chocolatey) │
|
||||||
|
└─────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
### Directory Layout
|
||||||
|
|
||||||
|
```
|
||||||
|
winutil/
|
||||||
|
├── Compile.ps1 # Build script that combines all files
|
||||||
|
├── winutil.ps1 # Compiled output (generated)
|
||||||
|
├── scripts/
|
||||||
|
│ ├── main.ps1 # Entry point and GUI initialization
|
||||||
|
│ └── start.ps1 # Startup logic
|
||||||
|
├── functions/
|
||||||
|
│ ├── private/ # Internal helper functions
|
||||||
|
│ │ ├── Get-WinUtilVariables.ps1
|
||||||
|
│ │ ├── Install-WinUtilWinget.ps1
|
||||||
|
│ │ └── ...
|
||||||
|
│ ├── public/ # User-facing functions
|
||||||
|
│ │ ├── Initialize-WPFUI.ps1
|
||||||
|
│ │ └── ...
|
||||||
|
│ └── microwin/ # MicroWin specific functions
|
||||||
|
│ ├── Invoke-Microwin.ps1
|
||||||
|
│ └── ...
|
||||||
|
├── config/ # JSON configuration files
|
||||||
|
│ ├── applications.json # Application definitions
|
||||||
|
│ ├── tweaks.json # Tweak definitions
|
||||||
|
│ ├── feature.json # Windows feature definitions
|
||||||
|
│ └── preset.json # Preset configurations
|
||||||
|
├── xaml/
|
||||||
|
│ └── inputXML.xaml # GUI layout definition
|
||||||
|
└── docs/ # Documentation
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Components
|
||||||
|
|
||||||
|
#### 1. Compile.ps1
|
||||||
|
**Purpose**: Combines all separate script files into a single `winutil.ps1` for distribution.
|
||||||
|
|
||||||
|
**Process**:
|
||||||
|
1. Reads all function files from `/functions/`
|
||||||
|
2. Includes configuration JSON files
|
||||||
|
3. Embeds XAML GUI definition
|
||||||
|
4. Combines into single script
|
||||||
|
5. Outputs `winutil.ps1`
|
||||||
|
|
||||||
|
**Why**: Makes distribution easier (single file) and improves load time.
|
||||||
|
|
||||||
|
#### 2. scripts/main.ps1
|
||||||
|
**Purpose**: Entry point that initializes the GUI and event system.
|
||||||
|
|
||||||
|
**Responsibilities**:
|
||||||
|
- Load XAML and create WPF window
|
||||||
|
- Initialize form elements
|
||||||
|
- Set up event handlers
|
||||||
|
- Load configurations
|
||||||
|
- Display the GUI
|
||||||
|
|
||||||
|
#### 3. functions/public/
|
||||||
|
**Purpose**: User-facing functions that implement main features.
|
||||||
|
|
||||||
|
**Key Functions**:
|
||||||
|
- `Initialize-WPFUI.ps1`: Sets up the GUI
|
||||||
|
- `Invoke-WPFTweak*`: Applies system tweaks
|
||||||
|
- `Invoke-WPFFeature*`: Enables Windows features
|
||||||
|
- `Install-WinUtilProgram*`: Installs applications
|
||||||
|
|
||||||
|
**Naming Convention**: Functions start with `WPF` or `Winutil` to be loaded into the runspace.
|
||||||
|
|
||||||
|
#### 4. functions/private/
|
||||||
|
**Purpose**: Internal helper functions not directly called by users.
|
||||||
|
|
||||||
|
**Key Functions**:
|
||||||
|
- `Get-WinUtilVariables.ps1`: Retrieves UI element references
|
||||||
|
- `Install-WinUtilWinget.ps1`: Ensures WinGet is installed
|
||||||
|
- `Get-WinUtilCheckBoxes.ps1`: Gets checkbox states
|
||||||
|
- `Invoke-WinUtilCurrentSystem.ps1`: Gets system information
|
||||||
|
|
||||||
|
#### 5. config/*.json
|
||||||
|
**Purpose**: Define available applications, tweaks, and features declaratively.
|
||||||
|
|
||||||
|
**Files**:
|
||||||
|
- `applications.json`: Application definitions with WinGet/Choco IDs
|
||||||
|
- `tweaks.json`: Registry tweaks and their undo actions
|
||||||
|
- `feature.json`: Windows features that can be enabled/disabled
|
||||||
|
- `preset.json`: Predefined tweak combinations
|
||||||
|
- `dns.json`: DNS provider configurations
|
||||||
|
|
||||||
|
#### 6. xaml/inputXML.xaml
|
||||||
|
**Purpose**: WPF GUI layout and design.
|
||||||
|
|
||||||
|
**Structure**:
|
||||||
|
- TabControl for main tabs (Install, Tweaks, Config, MicroWin)
|
||||||
|
- Buttons with event handlers
|
||||||
|
- TextBoxes for input
|
||||||
|
- CheckBoxes for options
|
||||||
|
- ListBoxes for selections
|
||||||
|
|
||||||
|
## Data Flow
|
||||||
|
|
||||||
|
### Application Installation Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
User clicks "Install"
|
||||||
|
↓
|
||||||
|
Get-WinUtilCheckBoxes → Retrieves selected apps
|
||||||
|
↓
|
||||||
|
For each selected app:
|
||||||
|
↓
|
||||||
|
Check if WinGet/Choco installed
|
||||||
|
↓
|
||||||
|
Install-WinUtilWinget/Choco (if needed)
|
||||||
|
↓
|
||||||
|
Install-WinUtilProgramWinget/Choco → Install app
|
||||||
|
↓
|
||||||
|
Update UI with progress
|
||||||
|
↓
|
||||||
|
Display completion message
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tweak Application Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
User selects tweaks and clicks "Run Tweaks"
|
||||||
|
↓
|
||||||
|
Get-WinUtilCheckBoxes → Get selected tweaks
|
||||||
|
↓
|
||||||
|
For each selected tweak:
|
||||||
|
↓
|
||||||
|
Load tweak definition from tweaks.json
|
||||||
|
↓
|
||||||
|
Invoke-WPFTweak → Apply registry/service changes
|
||||||
|
↓
|
||||||
|
Log changes
|
||||||
|
↓
|
||||||
|
Store original values (for undo)
|
||||||
|
↓
|
||||||
|
Update UI
|
||||||
|
↓
|
||||||
|
Display completion
|
||||||
|
```
|
||||||
|
|
||||||
|
### Undo Tweak Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
User selects tweaks and clicks "Undo"
|
||||||
|
↓
|
||||||
|
Get-WinUtilCheckBoxes → Get selected tweaks
|
||||||
|
↓
|
||||||
|
For each tweak:
|
||||||
|
↓
|
||||||
|
Retrieve "OriginalState" from tweak definition
|
||||||
|
↓
|
||||||
|
Invoke-WPFUndoTweak → Restore original values
|
||||||
|
↓
|
||||||
|
Remove from applied tweaks log
|
||||||
|
↓
|
||||||
|
Update UI
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration File Format
|
||||||
|
|
||||||
|
### applications.json Structure
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"WPFInstall<AppName>": {
|
||||||
|
"category": "Browsers",
|
||||||
|
"choco": "googlechrome",
|
||||||
|
"content": "Google Chrome",
|
||||||
|
"description": "Google Chrome browser",
|
||||||
|
"link": "https://chrome.google.com",
|
||||||
|
"winget": "Google.Chrome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Fields**:
|
||||||
|
- `category`: Which section in the Install tab
|
||||||
|
- `content`: Display name in GUI
|
||||||
|
- `description`: Tooltip/description text
|
||||||
|
- `winget`: WinGet package ID
|
||||||
|
- `choco`: Chocolatey package name
|
||||||
|
- `link`: Official website
|
||||||
|
|
||||||
|
### tweaks.json Structure
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"WPFTweaksTelemetry": {
|
||||||
|
"Content": "Disable Telemetry",
|
||||||
|
"Description": "Disables Microsoft Telemetry",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"Order": "a003_",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\DataCollection",
|
||||||
|
"Name": "AllowTelemetry",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "0",
|
||||||
|
"OriginalValue": "1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ScheduledTask": [
|
||||||
|
{
|
||||||
|
"Name": "Microsoft\\Windows\\Autochk\\Proxy",
|
||||||
|
"State": "Disabled",
|
||||||
|
"OriginalState": "Enabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Fields**:
|
||||||
|
- `Content`: Display name
|
||||||
|
- `Description`: What it does
|
||||||
|
- `category`: Essential/Advanced/Customize
|
||||||
|
- `registry`: Registry changes to make
|
||||||
|
- `ScheduledTask`: Scheduled tasks to modify
|
||||||
|
- `service`: Services to change
|
||||||
|
- `OriginalValue/State`: For undo functionality
|
||||||
|
|
||||||
|
## PowerShell Runspace
|
||||||
|
|
||||||
|
Winutil uses PowerShell runspaces for the GUI to remain responsive:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Create runspace
|
||||||
|
$sync.runspace = [runspacefactory]::CreateRunspace()
|
||||||
|
$sync.runspace.Open()
|
||||||
|
$sync.runspace.SessionStateProxy.SetVariable("sync", $sync)
|
||||||
|
|
||||||
|
# Run code in background
|
||||||
|
$powershell = [powershell]::Create().AddScript($scriptblock)
|
||||||
|
$powershell.Runspace = $sync.runspace
|
||||||
|
$handle = $powershell.BeginInvoke()
|
||||||
|
```
|
||||||
|
|
||||||
|
**Why**: Prevents UI freezing during long-running operations.
|
||||||
|
|
||||||
|
## WPF Event Handling
|
||||||
|
|
||||||
|
Events are wired up via XAML element names:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Get all named elements
|
||||||
|
$sync.keys | ForEach-Object {
|
||||||
|
if($sync.$_.GetType().Name -eq "Button") {
|
||||||
|
$sync.$_.Add_Click({
|
||||||
|
$button = $sync.$($args[0].Name)
|
||||||
|
& "Invoke-$($args[0].Name)"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Convention**: Button named `WPFInstallButton` calls function `Invoke-WPFInstallButton`.
|
||||||
|
|
||||||
|
## Package Manager Integration
|
||||||
|
|
||||||
|
### WinGet Integration
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Check if installed
|
||||||
|
if (!(Get-Command winget -ErrorAction SilentlyContinue)) {
|
||||||
|
Install-WinUtilWinget
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install package
|
||||||
|
winget install --id $app.winget --silent --accept-source-agreements
|
||||||
|
```
|
||||||
|
|
||||||
|
### Chocolatey Integration
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Check if installed
|
||||||
|
if (!(Get-Command choco -ErrorAction SilentlyContinue)) {
|
||||||
|
Install-WinUtilChoco
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install package
|
||||||
|
choco install $app.choco -y
|
||||||
|
```
|
||||||
|
|
||||||
|
## MicroWin Architecture
|
||||||
|
|
||||||
|
MicroWin operates in phases:
|
||||||
|
|
||||||
|
1. **Mount ISO**: Extract Windows image
|
||||||
|
2. **Modify Image**: Remove components, apply tweaks
|
||||||
|
3. **Inject Drivers**: Add custom drivers (optional)
|
||||||
|
4. **Create Unattend**: Generate automated install configuration
|
||||||
|
5. **Rebuild ISO**: Package modified image into new ISO
|
||||||
|
|
||||||
|
**Key Files**:
|
||||||
|
- `Invoke-Microwin.ps1`: Main orchestration
|
||||||
|
- `Microwin-RemovePackages.ps1`: Remove Windows packages
|
||||||
|
- `Microwin-RemoveFeatures.ps1`: Disable features
|
||||||
|
- `Microwin-NewUnattend.ps1`: Create unattend.xml
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
Winutil uses PowerShell error handling:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
try {
|
||||||
|
# Attempt operation
|
||||||
|
Invoke-SomeOperation
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Host "Error: $_" -ForegroundColor Red
|
||||||
|
# Log error
|
||||||
|
Add-Content -Path $logfile -Value "ERROR: $_"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Logging**: Errors and operations are logged for debugging.
|
||||||
|
|
||||||
|
## Configuration Loading
|
||||||
|
|
||||||
|
At startup, Winutil loads all configurations:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Load JSON configs
|
||||||
|
$sync.configs = @{}
|
||||||
|
$sync.configs.applications = Get-Content "config/applications.json" | ConvertFrom-Json
|
||||||
|
$sync.configs.tweaks = Get-Content "config/tweaks.json" | ConvertFrom-Json
|
||||||
|
$sync.configs.features = Get-Content "config/feature.json" | ConvertFrom-Json
|
||||||
|
```
|
||||||
|
|
||||||
|
**Sync Hash**: `$sync` hashtable shares state across runspaces.
|
||||||
|
|
||||||
|
## UI Update Pattern
|
||||||
|
|
||||||
|
UI updates must happen on the UI thread:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$sync.form.Dispatcher.Invoke([action]{
|
||||||
|
$sync.WPFStatusLabel.Content = "Installing..."
|
||||||
|
}, "Normal")
|
||||||
|
```
|
||||||
|
|
||||||
|
**Why**: WPF requires UI updates on the main thread.
|
||||||
|
|
||||||
|
## Adding New Features
|
||||||
|
|
||||||
|
### Adding a New Application
|
||||||
|
|
||||||
|
1. Edit `config/applications.json`:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"WPFInstallNewApp": {
|
||||||
|
"category": "Utilities",
|
||||||
|
"content": "New App",
|
||||||
|
"description": "Description of new app",
|
||||||
|
"winget": "Publisher.AppName",
|
||||||
|
"choco": "appname"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Recompile: `.\Compile.ps1`
|
||||||
|
3. The app appears automatically in Install tab
|
||||||
|
|
||||||
|
### Adding a New Tweak
|
||||||
|
|
||||||
|
1. Edit `config/tweaks.json`:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"WPFTweaksNewTweak": {
|
||||||
|
"Content": "New Tweak",
|
||||||
|
"Description": "What it does",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\Path\\To\\Key",
|
||||||
|
"Name": "ValueName",
|
||||||
|
"Type": "DWord",
|
||||||
|
"Value": "1",
|
||||||
|
"OriginalValue": "0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Recompile: `.\Compile.ps1`
|
||||||
|
3. Tweak appears in Tweaks tab
|
||||||
|
|
||||||
|
### Adding a New Function
|
||||||
|
|
||||||
|
1. Create file in `functions/public/` or `functions/private/`:
|
||||||
|
```powershell
|
||||||
|
# functions/public/Invoke-WPFNewFeature.ps1
|
||||||
|
function Invoke-WPFNewFeature {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Does something new
|
||||||
|
#>
|
||||||
|
# Implementation
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. File naming must include "WPF" or "Winutil" to load
|
||||||
|
3. Recompile: `.\Compile.ps1`
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
### Manual Testing
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Compile and run with -run flag
|
||||||
|
.\Compile.ps1 -run
|
||||||
|
```
|
||||||
|
|
||||||
|
### Automated Tests
|
||||||
|
|
||||||
|
Tests are in `/pester/`:
|
||||||
|
- `configs.Tests.ps1`: Validates JSON configurations
|
||||||
|
- `functions.Tests.ps1`: Tests PowerShell functions
|
||||||
|
|
||||||
|
Run tests:
|
||||||
|
```powershell
|
||||||
|
Invoke-Pester
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build Process
|
||||||
|
|
||||||
|
### Development Build
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
.\Compile.ps1
|
||||||
|
```
|
||||||
|
|
||||||
|
Outputs `winutil.ps1` in the root directory.
|
||||||
|
|
||||||
|
### Production Release
|
||||||
|
|
||||||
|
1. Tag release in Git
|
||||||
|
2. GitHub Actions builds and uploads `winutil.ps1`
|
||||||
|
3. Release appears on GitHub Releases
|
||||||
|
4. Users download via `irm christitus.com/win`
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
**Required**:
|
||||||
|
- PowerShell 5.1+
|
||||||
|
- .NET Framework 4.5+
|
||||||
|
- Windows 10 1809+
|
||||||
|
|
||||||
|
**Optional (auto-installed)**:
|
||||||
|
- WinGet (Windows Package Manager)
|
||||||
|
- Chocolatey
|
||||||
|
- oscdimg.exe (for MicroWin)
|
||||||
|
|
||||||
|
## Performance Considerations
|
||||||
|
|
||||||
|
**Optimization Strategies**:
|
||||||
|
- Lazy-load configurations (only when needed)
|
||||||
|
- Use runspaces for long operations
|
||||||
|
- Cache expensive lookups
|
||||||
|
- Minimize registry reads/writes
|
||||||
|
- Batch operations when possible
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
**Safety Measures**:
|
||||||
|
- All operations logged
|
||||||
|
- Registry backups for undo
|
||||||
|
- No credential storage
|
||||||
|
- Open source (auditable)
|
||||||
|
- Digitally signed (future)
|
||||||
|
|
||||||
|
## Contributing Guidelines
|
||||||
|
|
||||||
|
**Code Standards**:
|
||||||
|
- Use proper PowerShell cmdlet naming (Verb-Noun)
|
||||||
|
- Include comment-based help
|
||||||
|
- Follow existing code style
|
||||||
|
- Test thoroughly before PR
|
||||||
|
- Document significant changes
|
||||||
|
|
||||||
|
**File Naming**:
|
||||||
|
- Public functions: `Invoke-WPF*.ps1` or `Invoke-Winutil*.ps1`
|
||||||
|
- Private functions: `Get-WinUtil*.ps1` or verb-WinUtil*.ps1`
|
||||||
|
- Must include "WPF" or "Winutil" to load
|
||||||
|
|
||||||
|
## Future Architecture Plans
|
||||||
|
|
||||||
|
**Roadmap Considerations**:
|
||||||
|
- Plugin system for community extensions
|
||||||
|
- Config import/export
|
||||||
|
- Cloud sync for configurations
|
||||||
|
- Enhanced logging dashboard
|
||||||
|
- Modular compilation (choose features)
|
||||||
|
|
||||||
|
## Related Documentation
|
||||||
|
|
||||||
|
- [Contributing Guide](../../contributing/) - How to contribute code
|
||||||
|
- [User Guide](../../userguide/) - End-user documentation
|
||||||
|
- [FAQ](../../faq/) - Common questions
|
||||||
|
|
||||||
|
## Additional Resources
|
||||||
|
|
||||||
|
- **GitHub Repository**: [ChrisTitusTech/winutil](https://github.com/ChrisTitusTech/winutil)
|
||||||
|
- **PowerShell Docs**: [Microsoft Docs](https://docs.microsoft.com/powershell/)
|
||||||
|
- **WPF Guide**: [WPF Documentation](https://docs.microsoft.com/dotnet/desktop/wpf/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated**: January 2026
|
||||||
|
**Maintainers**: Chris Titus Tech and contributors
|
||||||
@@ -1,10 +1,301 @@
|
|||||||
---
|
---
|
||||||
title: FAQ's
|
title: Frequently Asked Questions
|
||||||
toc: false
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
## How do I uninstall Winutil?
|
## General Questions
|
||||||
* You do not have to uninstall Winutil. As it is a script you run from Powershell it only loads into your RAM. This means as soon as you close Winutil it will be deleted off your system.
|
|
||||||
|
|
||||||
## I applied a tweak and now something doesn't work, what do I do?
|
### How do I uninstall Winutil?
|
||||||
* If you applied a tweak and it breaks something, you can always revert the tweak by selecting the tweak and clicking "Undo Selected Tweaks".
|
You do not have to uninstall Winutil. As it is a script you run from PowerShell, it only loads into your RAM. This means as soon as you close Winutil, it will be cleared from your system. Winutil doesn't install itself permanently on your computer.
|
||||||
|
|
||||||
|
### Is Winutil safe to use?
|
||||||
|
Yes, Winutil is open source and the code is publicly available on GitHub. Thousands of users run it daily. However, like any system modification tool, you should:
|
||||||
|
- Run it as Administrator (required)
|
||||||
|
- Create a restore point before major changes
|
||||||
|
- Understand what tweaks you're applying
|
||||||
|
- Download only from official sources
|
||||||
|
|
||||||
|
### Do I need to keep running Winutil?
|
||||||
|
No. Once you've applied tweaks or installed applications, you can close Winutil. Changes persist after closing. You only need to run Winutil again when you want to make additional changes or undo tweaks.
|
||||||
|
|
||||||
|
### Does Winutil require internet access?
|
||||||
|
- **For downloading**: Yes, installing applications requires internet
|
||||||
|
- **For tweaks**: No, most tweaks work offline
|
||||||
|
- **Initial run**: Yes, to download the latest script
|
||||||
|
|
||||||
|
### How often is Winutil updated?
|
||||||
|
Winutil is actively maintained with frequent updates. New features, bug fixes, and application additions are released regularly. The script auto-downloads the latest version each time you run it.
|
||||||
|
|
||||||
|
## Installation & Running
|
||||||
|
|
||||||
|
### How do I run Winutil?
|
||||||
|
1. Open PowerShell as Administrator
|
||||||
|
2. Run: `irm "https://christitus.com/win" | iex`
|
||||||
|
3. Wait for the GUI to appear
|
||||||
|
|
||||||
|
### Why do I need Administrator rights?
|
||||||
|
Winutil makes system-level changes (registry edits, service modifications, software installation) that require elevated permissions. Without admin rights, most features won't work.
|
||||||
|
|
||||||
|
### The script won't download. What do I do?
|
||||||
|
Try these solutions in order:
|
||||||
|
|
||||||
|
1. **Use the direct GitHub link**:
|
||||||
|
```powershell
|
||||||
|
irm https://github.com/ChrisTitusTech/Winutil/releases/latest/download/Winutil.ps1 | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Force TLS 1.2** (for older Windows):
|
||||||
|
```powershell
|
||||||
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||||
|
irm "https://christitus.com/win" | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Change DNS** to Cloudflare (1.1.1.1) or Google (8.8.8.8)
|
||||||
|
|
||||||
|
4. **Use a VPN** if GitHub is blocked in your region
|
||||||
|
|
||||||
|
### I get an "Execution Policy" error. How do I fix it?
|
||||||
|
Run this command first to allow script execution:
|
||||||
|
```powershell
|
||||||
|
Set-ExecutionPolicy Unrestricted -Scope Process -Force
|
||||||
|
irm "https://christitus.com/win" | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
This only affects the current PowerShell session and is safe.
|
||||||
|
|
||||||
|
## Tweaks & Modifications
|
||||||
|
|
||||||
|
### I applied a tweak and now something doesn't work. What do I do?
|
||||||
|
If you applied a tweak and it breaks something, you can revert it:
|
||||||
|
1. Open Winutil again
|
||||||
|
2. Go to the **Tweaks** tab
|
||||||
|
3. Select the same tweak you applied
|
||||||
|
4. Click **"Undo Selected Tweaks"**
|
||||||
|
5. The system will revert to the previous state
|
||||||
|
|
||||||
|
Alternatively, use System Restore if you created a restore point.
|
||||||
|
|
||||||
|
### Which tweaks are safe to apply?
|
||||||
|
**Safe for everyone (Essential Tweaks)**:
|
||||||
|
- Disable Telemetry
|
||||||
|
- Disable Activity History
|
||||||
|
- Disable Location Tracking
|
||||||
|
- Delete Temporary Files
|
||||||
|
- Run Disk Cleanup
|
||||||
|
- Create Restore Point
|
||||||
|
|
||||||
|
**Caution needed (Advanced Tweaks)**:
|
||||||
|
- Remove Microsoft Store
|
||||||
|
- Disable Windows Defender
|
||||||
|
- Remove all bloatware
|
||||||
|
- Disable system services
|
||||||
|
|
||||||
|
Start with Essential Tweaks. Only use Advanced Tweaks if you understand the implications.
|
||||||
|
|
||||||
|
### Will tweaks survive Windows Updates?
|
||||||
|
Most tweaks persist through updates, but some may be reset by major Windows updates (feature updates). You may need to reapply certain tweaks after major updates.
|
||||||
|
|
||||||
|
### Can I create my own tweak presets?
|
||||||
|
Currently, Winutil uses predefined presets (Desktop, Laptop, Minimal, Standard). Custom presets aren't directly supported in the GUI, but you can script your preferred configuration.
|
||||||
|
|
||||||
|
### What's the difference between Essential and Advanced tweaks?
|
||||||
|
- **Essential Tweaks**: Safe for most users, improve performance/privacy with minimal risk
|
||||||
|
- **Advanced Tweaks**: More aggressive changes that may break functionality or compatibility. Use with caution.
|
||||||
|
|
||||||
|
## Application Installation
|
||||||
|
|
||||||
|
### How does Winutil install applications?
|
||||||
|
Winutil uses Windows Package Manager (WinGet) and Chocolatey to automate installations. It downloads applications from official sources and installs them silently without bloatware.
|
||||||
|
|
||||||
|
### Can I install multiple applications at once?
|
||||||
|
Yes! Check the boxes for all applications you want, then click "Install Selected". They'll install sequentially.
|
||||||
|
|
||||||
|
### WinGet isn't working. How do I fix it?
|
||||||
|
1. Go to the **Config** tab
|
||||||
|
2. Find **Fixes** section
|
||||||
|
3. Click **"WinGet Reinstall"**
|
||||||
|
4. Wait for completion
|
||||||
|
5. Try installing applications again
|
||||||
|
|
||||||
|
### Do installed applications have bloatware or bundled software?
|
||||||
|
No. WinGet and Chocolatey install clean versions of applications without bundled offers, toolbars, or bloatware.
|
||||||
|
|
||||||
|
### Can I uninstall applications through Winutil?
|
||||||
|
Winutil focuses on installation. To uninstall:
|
||||||
|
- Use Windows Settings > Apps > Installed Apps
|
||||||
|
- Or use the application's built-in uninstaller
|
||||||
|
|
||||||
|
### Will installed apps auto-update?
|
||||||
|
Applications with built-in update mechanisms will auto-update. You can also update them via WinGet/Chocolatey commands or through Winutil's "Upgrade Selected" feature.
|
||||||
|
|
||||||
|
## MicroWin
|
||||||
|
|
||||||
|
### What is MicroWin?
|
||||||
|
MicroWin is a feature that creates custom Windows installation ISOs with bloatware removed, optimizations applied, and unnecessary components stripped out before installation.
|
||||||
|
|
||||||
|
### Is MicroWin legal?
|
||||||
|
Modifying Windows ISOs is a gray area legally. Use MicroWin for personal/educational purposes. You still need a valid Windows license to use the resulting installation.
|
||||||
|
|
||||||
|
### Can I install Windows updates on MicroWin?
|
||||||
|
Yes, Windows Update works normally on MicroWin installations. Some removed components may be restored by updates.
|
||||||
|
|
||||||
|
### How much smaller is a MicroWin ISO?
|
||||||
|
Depends on what you remove. Typically:
|
||||||
|
- Standard Windows 11: ~5.5 GB ISO, ~20-25 GB installed
|
||||||
|
- MicroWin (aggressive): ~3.5 GB ISO, ~10-15 GB installed
|
||||||
|
|
||||||
|
### Will all software work on MicroWin?
|
||||||
|
Most desktop applications work fine. Microsoft Store apps won't work if you removed the Store. Some features may be missing if you removed their dependencies.
|
||||||
|
|
||||||
|
## Updates & Maintenance
|
||||||
|
|
||||||
|
### Should I disable Windows Updates?
|
||||||
|
Generally, **no**. Security updates are important. However, you might:
|
||||||
|
- Use "Security Updates Only" to avoid feature updates
|
||||||
|
- Pause updates temporarily for stability
|
||||||
|
- Disable only during critical work periods
|
||||||
|
|
||||||
|
### How do I re-enable updates after disabling them?
|
||||||
|
1. Open Winutil
|
||||||
|
2. Go to **Updates** tab
|
||||||
|
3. Click **"Enable Updates"**
|
||||||
|
4. Updates will resume normally
|
||||||
|
|
||||||
|
### What's the difference between "Security Updates Only" and "Disable Updates"?
|
||||||
|
- **Security Updates Only**: Installs critical security patches, blocks feature updates (major versions)
|
||||||
|
- **Disable Updates**: Blocks ALL updates including security (not recommended)
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Winutil won't open after running the command
|
||||||
|
Possible causes:
|
||||||
|
1. **Antivirus blocking**: Add PowerShell exception
|
||||||
|
2. **Not run as Admin**: Restart PowerShell as Administrator
|
||||||
|
3. **Corrupted download**: Close PowerShell, reopen, try again
|
||||||
|
4. **Windows Defender**: Allow the script
|
||||||
|
|
||||||
|
### My antivirus flags Winutil as malicious
|
||||||
|
This is a false positive. Winutil makes system changes that antivirus programs may flag. The code is open source and audited. Add an exception if needed.
|
||||||
|
|
||||||
|
### An application failed to install
|
||||||
|
Troubleshooting steps:
|
||||||
|
1. Check your internet connection
|
||||||
|
2. Try installing just that one application
|
||||||
|
3. Review error messages in the output panel
|
||||||
|
4. Check if antivirus is blocking
|
||||||
|
5. Try the WinGet Reinstall fix
|
||||||
|
|
||||||
|
### Network tweaks broke my internet connection
|
||||||
|
1. Open Winutil
|
||||||
|
2. Go to **Config** > **Fixes**
|
||||||
|
3. Click **"Reset Network"**
|
||||||
|
4. Restart your computer
|
||||||
|
5. Connection should be restored
|
||||||
|
|
||||||
|
### I can't access certain Windows features after applying tweaks
|
||||||
|
Undo the tweaks that might have affected those features:
|
||||||
|
1. Reopen Winutil
|
||||||
|
2. Select the tweaks you applied
|
||||||
|
3. Click "Undo Selected Tweaks"
|
||||||
|
|
||||||
|
If that doesn't work, use System Restore to revert to a previous state.
|
||||||
|
|
||||||
|
## Advanced Topics
|
||||||
|
|
||||||
|
### Can I run Winutil on Windows Server?
|
||||||
|
Yes, Winutil works on Windows Server editions, though some features may not be applicable or may behave differently.
|
||||||
|
|
||||||
|
### Does Winutil work with Windows LTSC?
|
||||||
|
Yes, Winutil works with Windows 10/11 LTSC editions. Some applications may not be available depending on your configuration.
|
||||||
|
|
||||||
|
### Can I use Winutil in a corporate/enterprise environment?
|
||||||
|
Yes, but check your organization's policies first. Some tweaks may conflict with group policies or corporate requirements.
|
||||||
|
|
||||||
|
### How do I automate Winutil for multiple PCs?
|
||||||
|
See the [Automation Guide](userguide/automation/) for details on:
|
||||||
|
- Configuration files
|
||||||
|
- PowerShell parameters
|
||||||
|
- Batch deployment
|
||||||
|
- Silent installation
|
||||||
|
|
||||||
|
### Can I contribute to Winutil?
|
||||||
|
Yes! Contributions are welcome:
|
||||||
|
- Report bugs on GitHub Issues
|
||||||
|
- Submit pull requests for fixes/features
|
||||||
|
- Improve documentation
|
||||||
|
- Help others in Discord
|
||||||
|
|
||||||
|
See the [Contributing Guide](contributing/) for details.
|
||||||
|
|
||||||
|
## Privacy & Security
|
||||||
|
|
||||||
|
### Does Winutil collect any data?
|
||||||
|
No, Winutil itself doesn't collect or transmit any user data. It's a local PowerShell script.
|
||||||
|
|
||||||
|
### What telemetry does the Disable Telemetry tweak block?
|
||||||
|
It disables:
|
||||||
|
- Windows diagnostic data collection
|
||||||
|
- Activity history tracking
|
||||||
|
- Feedback requests
|
||||||
|
- Usage statistics
|
||||||
|
- Error reporting (optional)
|
||||||
|
|
||||||
|
### Is it safe to disable Windows Defender?
|
||||||
|
**Generally not recommended**. Only disable Defender if:
|
||||||
|
- You have alternative antivirus installed
|
||||||
|
- You understand the security risks
|
||||||
|
- You're in a controlled/isolated environment
|
||||||
|
|
||||||
|
### Will removing Microsoft Store affect security updates?
|
||||||
|
No, Windows security updates are independent of the Microsoft Store.
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
### Will Winutil make my PC faster?
|
||||||
|
Tweaks can improve performance by:
|
||||||
|
- Reducing background processes
|
||||||
|
- Disabling unnecessary services
|
||||||
|
- Cleaning temporary files
|
||||||
|
- Optimizing startup programs
|
||||||
|
|
||||||
|
Results vary based on your system and which tweaks you apply.
|
||||||
|
|
||||||
|
### What's the best preset for gaming?
|
||||||
|
Use the **Desktop** preset, then additionally apply:
|
||||||
|
- Disable GameDVR
|
||||||
|
- Ultimate Performance power plan
|
||||||
|
- Disable fullscreen optimizations (Advanced)
|
||||||
|
- Set display for performance (Advanced)
|
||||||
|
|
||||||
|
### How much RAM does Winutil use?
|
||||||
|
Winutil itself uses ~50-100MB while running. Once closed, it's removed from memory.
|
||||||
|
|
||||||
|
## Error Messages
|
||||||
|
|
||||||
|
### "Access Denied" errors
|
||||||
|
- Ensure PowerShell is running as Administrator
|
||||||
|
- Check if antivirus is blocking changes
|
||||||
|
- Verify you have ownership of files/registry keys
|
||||||
|
|
||||||
|
### "File not found" errors during MicroWin
|
||||||
|
- Verify source ISO isn't corrupted
|
||||||
|
- Ensure sufficient disk space (20GB+)
|
||||||
|
- Check ISO is an official Windows ISO
|
||||||
|
|
||||||
|
### WinGet configuration prompt won't go away
|
||||||
|
Type `Y` and press Enter in the PowerShell window. This only happens on first use and configures WinGet for your system.
|
||||||
|
|
||||||
|
## Still Need Help?
|
||||||
|
|
||||||
|
Can't find your answer? Try these resources:
|
||||||
|
|
||||||
|
- **[Known Issues](knownissues/)** - Check if it's a known problem
|
||||||
|
- **[User Guide](userguide/)** - Comprehensive documentation
|
||||||
|
- **[Discord Community](https://discord.gg/RUbZUZyByQ)** - Get help from other users
|
||||||
|
- **[GitHub Issues](https://github.com/ChrisTitusTech/winutil/issues)** - Report bugs
|
||||||
|
- **[YouTube Tutorial](https://www.youtube.com/watch?v=6UQZ5oQg8XA)** - Video walkthrough
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated**: January 2026
|
||||||
|
**Found this helpful?** Consider starring the project on [GitHub](https://github.com/ChrisTitusTech/winutil)!
|
||||||
|
|||||||
@@ -1,2 +1,167 @@
|
|||||||
Welcome to the official User Guide for **Winutil**, your all-in-one Windows toolkit.
|
---
|
||||||
This document will walk you through installation, configuration, and usage of Winutil’s powerful features.
|
title: User Guide
|
||||||
|
weight: 2
|
||||||
|
---
|
||||||
|
|
||||||
|
Welcome to the official User Guide for **Winutil**, your all-in-one Windows toolkit!
|
||||||
|
|
||||||
|
## What is Winutil?
|
||||||
|
|
||||||
|
Winutil (Chris Titus Tech's Windows Utility) is a comprehensive PowerShell-based tool that helps you:
|
||||||
|
|
||||||
|
- **Install Applications**: Quickly install popular software without manual downloads
|
||||||
|
- **Apply Tweaks**: Optimize Windows for performance, privacy, and usability
|
||||||
|
- **Fix Issues**: Troubleshoot common Windows problems with one-click fixes
|
||||||
|
- **Manage Updates**: Control how and when Windows updates install
|
||||||
|
- **Create MicroWin**: Build custom, lightweight Windows installation ISOs
|
||||||
|
- **Access Tools**: Quick access to Windows panels and utilities
|
||||||
|
|
||||||
|
## Who Should Use Winutil?
|
||||||
|
|
||||||
|
Winutil is designed for:
|
||||||
|
|
||||||
|
- **Home Users**: Wanting to optimize their personal PCs
|
||||||
|
- **Power Users**: Needing fine-grained control over Windows
|
||||||
|
- **IT Professionals**: Managing multiple systems efficiently
|
||||||
|
- **Gamers**: Optimizing systems for gaming performance
|
||||||
|
- **Privacy-Conscious Users**: Reducing telemetry and data collection
|
||||||
|
- **Developers**: Setting up clean development environments
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
New to Winutil? Start here:
|
||||||
|
|
||||||
|
1. **[Getting Started Guide](getting-started/)** - Installation and first steps
|
||||||
|
2. **[Application Store](store/)** - Learn to install software easily
|
||||||
|
3. **[Tweaks Guide](tweaks/)** - Optimize your system
|
||||||
|
4. **[Features & Fixes](features/)** - Troubleshoot common issues
|
||||||
|
|
||||||
|
## Main Features
|
||||||
|
|
||||||
|
### 🚀 Application Installation
|
||||||
|
|
||||||
|
Browse and install hundreds of popular applications with a single click. No more hunting for download links or dealing with installer bloat.
|
||||||
|
|
||||||
|
**[Read the Store Guide →](store/)**
|
||||||
|
|
||||||
|
### ⚙️ System Tweaks
|
||||||
|
|
||||||
|
Apply optimizations for performance, privacy, and usability. Choose from preset configurations or customize individual tweaks.
|
||||||
|
|
||||||
|
**[Read the Tweaks Guide →](tweaks/)**
|
||||||
|
|
||||||
|
### 🛠️ Config & Fixes
|
||||||
|
|
||||||
|
Quick fixes for common Windows problems:
|
||||||
|
- Reset network settings
|
||||||
|
- Fix Windows Update issues
|
||||||
|
- Repair system files
|
||||||
|
- Access legacy Windows panels
|
||||||
|
|
||||||
|
**[Read the Features Guide →](features/)**
|
||||||
|
|
||||||
|
### 🪟 MicroWin
|
||||||
|
|
||||||
|
Create custom Windows installation ISOs with bloatware removed, optimizations pre-applied, and unnecessary components stripped out.
|
||||||
|
|
||||||
|
**[Read the MicroWin Guide →](microwin/)**
|
||||||
|
|
||||||
|
### 🔄 Update Management
|
||||||
|
|
||||||
|
Take control of Windows Updates with options to:
|
||||||
|
- Enable/disable updates
|
||||||
|
- Security updates only
|
||||||
|
- Pause updates
|
||||||
|
- Manage driver updates
|
||||||
|
|
||||||
|
**[Read the Updates Guide →](updates/)**
|
||||||
|
|
||||||
|
### 🤖 Automation
|
||||||
|
|
||||||
|
Automate Winutil configurations for:
|
||||||
|
- Multiple PC setups
|
||||||
|
- Enterprise deployments
|
||||||
|
- Consistent configurations
|
||||||
|
- Scripted installations
|
||||||
|
|
||||||
|
**[Read the Automation Guide →](automation/)**
|
||||||
|
|
||||||
|
## Quick Links
|
||||||
|
|
||||||
|
| I want to... | Go to... |
|
||||||
|
|--------------|----------|
|
||||||
|
| Install Winutil for the first time | [Getting Started](getting-started/) |
|
||||||
|
| Install applications quickly | [Application Store](store/) |
|
||||||
|
| Speed up my computer | [Tweaks Guide](tweaks/) |
|
||||||
|
| Fix Windows Update problems | [Features - Fixes](features/) |
|
||||||
|
| Create a lightweight Windows ISO | [MicroWin](microwin/) |
|
||||||
|
| Automate setup for multiple PCs | [Automation](automation/) |
|
||||||
|
| Understand what tweaks do | [Tweaks Guide](tweaks/) |
|
||||||
|
|
||||||
|
## Safety and Best Practices
|
||||||
|
|
||||||
|
Before using Winutil:
|
||||||
|
|
||||||
|
✅ **Always**:
|
||||||
|
- Run PowerShell as Administrator
|
||||||
|
- Create a system restore point before major changes
|
||||||
|
- Understand what tweaks do before applying them
|
||||||
|
- Start with Essential Tweaks before Advanced ones
|
||||||
|
- Keep backups of important data
|
||||||
|
|
||||||
|
❌ **Never**:
|
||||||
|
- Apply all tweaks without understanding them
|
||||||
|
- Skip creating restore points
|
||||||
|
- Use on production systems without testing
|
||||||
|
- Disable security features unnecessarily
|
||||||
|
|
||||||
|
## System Requirements
|
||||||
|
|
||||||
|
- **Operating System**: Windows 10 (1809+) or Windows 11
|
||||||
|
- **PowerShell**: Version 5.1 or later (included in Windows)
|
||||||
|
- **Permissions**: Administrator access required
|
||||||
|
- **Internet**: Required for downloading apps and updates
|
||||||
|
- **.NET Framework**: 4.5+ (usually pre-installed)
|
||||||
|
|
||||||
|
## Getting Help
|
||||||
|
|
||||||
|
Need assistance?
|
||||||
|
|
||||||
|
- **📖 Documentation**: You're reading it! Use the navigation menu
|
||||||
|
- **❓ FAQ**: Check [Frequently Asked Questions](../faq/)
|
||||||
|
- **🐛 Known Issues**: Review [Known Issues](../knownissues/)
|
||||||
|
- **💬 Discord**: Join the [community Discord](https://discord.gg/RUbZUZyByQ)
|
||||||
|
- **🐙 GitHub**: Report bugs on [GitHub Issues](https://github.com/ChrisTitusTech/winutil/issues)
|
||||||
|
- **📺 YouTube**: Watch [video tutorials](https://www.youtube.com/watch?v=6UQZ5oQg8XA)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Want to help improve Winutil?
|
||||||
|
|
||||||
|
- **Report Bugs**: Submit issues on GitHub
|
||||||
|
- **Suggest Features**: Open feature requests
|
||||||
|
- **Contribute Code**: Submit pull requests
|
||||||
|
- **Improve Docs**: Help expand this documentation
|
||||||
|
- **Share Knowledge**: Help others in Discord
|
||||||
|
|
||||||
|
**[Read Contributing Guide →](../contributing/)**
|
||||||
|
|
||||||
|
## What's in This Guide?
|
||||||
|
|
||||||
|
This User Guide covers everything you need to know:
|
||||||
|
|
||||||
|
1. **[Getting Started](getting-started/)** - Installation, first run, basic usage
|
||||||
|
2. **[Application Store](store/)** - Installing software, using presets
|
||||||
|
3. **[Tweaks](tweaks/)** - System optimizations and customizations
|
||||||
|
4. **[Features & Fixes](features/)** - Troubleshooting tools and utilities
|
||||||
|
5. **[MicroWin](microwin/)** - Creating custom Windows ISOs
|
||||||
|
6. **[Updates](updates/)** - Managing Windows Update behavior
|
||||||
|
7. **[Automation](automation/)** - Scripting and batch deployments
|
||||||
|
|
||||||
|
## Video Tutorial
|
||||||
|
|
||||||
|
Watch the complete Winutil overview:
|
||||||
|
|
||||||
|
{{< youtube id=6UQZ5oQg8XA loading=lazy >}}
|
||||||
|
|
||||||
|
Ready to get started? Head to the **[Getting Started Guide](getting-started/)** now!
|
||||||
|
|||||||
273
docs/content/userguide/getting-started.md
Normal file
273
docs/content/userguide/getting-started.md
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
---
|
||||||
|
title: Getting Started with Winutil
|
||||||
|
weight: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
## Welcome to Winutil!
|
||||||
|
|
||||||
|
Winutil is a powerful Windows utility that helps you optimize, customize, and maintain your Windows system. This guide will walk you through everything you need to get started.
|
||||||
|
|
||||||
|
## System Requirements
|
||||||
|
|
||||||
|
Before running Winutil, ensure your system meets these requirements:
|
||||||
|
|
||||||
|
- **Operating System**: Windows 10 (version 1809 or later) or Windows 11
|
||||||
|
- **PowerShell**: Version 5.1 or later (included by default in Windows 10/11)
|
||||||
|
- **Administrator Access**: Required for system-level changes
|
||||||
|
- **Internet Connection**: Required for downloading applications and updates
|
||||||
|
- **.NET Framework**: Version 4.5 or later (usually pre-installed)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Winutil doesn't require traditional installation. It runs directly from PowerShell as a script.
|
||||||
|
|
||||||
|
### Step 1: Open PowerShell as Administrator
|
||||||
|
|
||||||
|
There are several ways to open PowerShell with admin rights:
|
||||||
|
|
||||||
|
**Method 1: Start Menu (Recommended)**
|
||||||
|
1. Right-click on the Windows Start button
|
||||||
|
2. Select "Windows PowerShell (Admin)" on Windows 10
|
||||||
|
3. Or select "Terminal (Admin)" on Windows 11
|
||||||
|
|
||||||
|
**Method 2: Search Method**
|
||||||
|
1. Press the `Windows` key
|
||||||
|
2. Type "PowerShell" or "Terminal"
|
||||||
|
3. Press `Ctrl + Shift + Enter` to launch as administrator
|
||||||
|
4. Or right-click and select "Run as administrator"
|
||||||
|
|
||||||
|
**Method 3: Run Dialog**
|
||||||
|
1. Press `Windows + R`
|
||||||
|
2. Type `powershell`
|
||||||
|
3. Press `Ctrl + Shift + Enter`
|
||||||
|
|
||||||
|
### Step 2: Run the Launch Command
|
||||||
|
|
||||||
|
Once PowerShell is open with administrator privileges, run one of these commands:
|
||||||
|
|
||||||
|
**Stable Release (Recommended for most users)**
|
||||||
|
```powershell
|
||||||
|
irm "https://christitus.com/win" | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
**Development Branch (For testing latest features)**
|
||||||
|
```powershell
|
||||||
|
irm "https://christitus.com/windev" | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> The `irm` command downloads the script, and `iex` executes it. This is safe when downloading from the official source.
|
||||||
|
|
||||||
|
### Step 3: Wait for Winutil to Load
|
||||||
|
|
||||||
|
The first time you run Winutil, it may take a few moments to:
|
||||||
|
- Download the latest version
|
||||||
|
- Initialize the interface
|
||||||
|
- Load all features and settings
|
||||||
|
|
||||||
|
## First Time Setup
|
||||||
|
|
||||||
|
### Configure WinGet (If Prompted)
|
||||||
|
|
||||||
|
On your first run, you may be prompted to configure WinGet (Windows Package Manager). This is normal.
|
||||||
|
|
||||||
|
1. When prompted, type `Y` and press Enter
|
||||||
|
2. Accept the terms and conditions
|
||||||
|
3. This only needs to be done once
|
||||||
|
|
||||||
|
### Understanding the Interface
|
||||||
|
|
||||||
|
Winutil opens with a clean, tabbed interface:
|
||||||
|
|
||||||
|
**Main Tabs**:
|
||||||
|
- **Install**: Browse and install applications
|
||||||
|
- **Tweaks**: Apply system optimizations and customizations
|
||||||
|
- **Config**: Access system tools and utilities
|
||||||
|
- **Updates**: Manage Windows updates
|
||||||
|
- **MicroWin**: Create custom, lightweight Windows ISOs
|
||||||
|
|
||||||
|
## Your First Actions
|
||||||
|
|
||||||
|
Here are some recommended first steps for new users:
|
||||||
|
|
||||||
|
### 1. Create a Restore Point
|
||||||
|
|
||||||
|
Before making any changes, create a system restore point:
|
||||||
|
|
||||||
|
1. Go to the **Tweaks** tab
|
||||||
|
2. Find "Create Restore Point" under Essential Tweaks
|
||||||
|
3. Check the box and click "Run Tweaks"
|
||||||
|
|
||||||
|
This allows you to undo changes if needed.
|
||||||
|
|
||||||
|
### 2. Install Essential Applications
|
||||||
|
|
||||||
|
1. Navigate to the **Install** tab
|
||||||
|
2. Browse categories or use the search bar
|
||||||
|
3. Check applications you want to install
|
||||||
|
4. Click "Install Selected" at the bottom
|
||||||
|
|
||||||
|
### 3. Apply Basic Tweaks
|
||||||
|
|
||||||
|
For a better Windows experience without risks:
|
||||||
|
|
||||||
|
1. Go to the **Tweaks** tab
|
||||||
|
2. Select the **"Desktop" preset** for a balanced configuration
|
||||||
|
3. Review the selected tweaks
|
||||||
|
4. Click "Run Tweaks"
|
||||||
|
|
||||||
|
## Common Tasks
|
||||||
|
|
||||||
|
### Installing Applications
|
||||||
|
|
||||||
|
**Single Application**:
|
||||||
|
1. Open **Install** tab
|
||||||
|
2. Search for the application name
|
||||||
|
3. Check the box next to it
|
||||||
|
4. Click "Install Selected"
|
||||||
|
|
||||||
|
**Multiple Applications**:
|
||||||
|
1. Check multiple application boxes
|
||||||
|
2. All checked apps will install in sequence
|
||||||
|
3. Progress is shown in the bottom panel
|
||||||
|
|
||||||
|
### Applying Tweaks
|
||||||
|
|
||||||
|
**Essential Tweaks** (Safe for all users):
|
||||||
|
1. Go to **Tweaks** tab
|
||||||
|
2. Select from Essential Tweaks section
|
||||||
|
3. Click "Run Tweaks"
|
||||||
|
|
||||||
|
**Advanced Tweaks** (Use with caution):
|
||||||
|
1. Only modify if you understand the implications
|
||||||
|
2. Always create a restore point first
|
||||||
|
3. Review documentation for each tweak
|
||||||
|
|
||||||
|
**Undoing Tweaks**:
|
||||||
|
1. Select the same tweaks you applied
|
||||||
|
2. Click "Undo Selected Tweaks"
|
||||||
|
3. System will revert to previous state
|
||||||
|
|
||||||
|
### Using Quick Fixes
|
||||||
|
|
||||||
|
For common Windows issues:
|
||||||
|
|
||||||
|
1. Go to **Config** tab
|
||||||
|
2. Navigate to **Fixes** section
|
||||||
|
3. Select the appropriate fix:
|
||||||
|
- **Reset Network**: Fixes network connectivity issues
|
||||||
|
- **Reset Windows Update**: Resolves update problems
|
||||||
|
- **System Corruption Scan**: Repairs corrupted system files
|
||||||
|
- **WinGet Reinstall**: Fixes package manager issues
|
||||||
|
|
||||||
|
### Changing DNS Servers
|
||||||
|
|
||||||
|
For improved privacy and speed:
|
||||||
|
|
||||||
|
1. Go to **Config** or **Tweaks** tab
|
||||||
|
2. Find the DNS section
|
||||||
|
3. Select a provider:
|
||||||
|
- **Cloudflare**: Fast and privacy-focused
|
||||||
|
- **Google**: Reliable and widely used
|
||||||
|
- **Quad9**: Security-focused with malware blocking
|
||||||
|
- **AdGuard**: Blocks ads and trackers
|
||||||
|
4. Click Apply
|
||||||
|
|
||||||
|
## Understanding Presets
|
||||||
|
|
||||||
|
Winutil offers several preset configurations:
|
||||||
|
|
||||||
|
- **Minimal**: Minimal changes, keeps most Windows features
|
||||||
|
- **Standard**: Good middle-ground for most users
|
||||||
|
|
||||||
|
## Safety Tips
|
||||||
|
|
||||||
|
✅ **DO**:
|
||||||
|
- Create restore points before major changes
|
||||||
|
- Read tweak descriptions before applying
|
||||||
|
- Start with Essential Tweaks
|
||||||
|
- Keep Windows up to date
|
||||||
|
- Back up important data
|
||||||
|
|
||||||
|
❌ **DON'T**:
|
||||||
|
- Apply all tweaks at once without understanding them
|
||||||
|
- Skip creating restore points
|
||||||
|
- Use Advanced Tweaks without research
|
||||||
|
- Disable security features unless necessary
|
||||||
|
- Run on production systems without testing
|
||||||
|
|
||||||
|
## Troubleshooting First Run
|
||||||
|
|
||||||
|
### Script Won't Download
|
||||||
|
|
||||||
|
**If the download fails**:
|
||||||
|
|
||||||
|
1. Try the direct GitHub link:
|
||||||
|
```powershell
|
||||||
|
irm https://github.com/ChrisTitusTech/Winutil/releases/latest/download/Winutil.ps1 | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Force TLS 1.2 (for older Windows versions):
|
||||||
|
```powershell
|
||||||
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||||
|
irm "https://christitus.com/win" | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
### Execution Policy Error
|
||||||
|
|
||||||
|
If you get an execution policy error:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Set-ExecutionPolicy Unrestricted -Scope Process -Force
|
||||||
|
irm "https://christitus.com/win" | iex
|
||||||
|
```
|
||||||
|
|
||||||
|
### Download Blocked (India/Certain Regions)
|
||||||
|
|
||||||
|
If GitHub is blocked in your region:
|
||||||
|
|
||||||
|
1. Use a VPN service
|
||||||
|
2. Change DNS to Cloudflare (1.1.1.1) or Google (8.8.8.8)
|
||||||
|
3. Try again
|
||||||
|
|
||||||
|
### Interface Doesn't Appear
|
||||||
|
|
||||||
|
If Winutil downloads but doesn't open:
|
||||||
|
|
||||||
|
1. Check if antivirus is blocking it
|
||||||
|
2. Ensure you ran PowerShell as administrator
|
||||||
|
3. Try closing and reopening PowerShell
|
||||||
|
4. Check Windows Defender exclusions
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
Now that you're set up, explore these guides:
|
||||||
|
|
||||||
|
- [Application Installation Guide](../store/) - Learn about installing software
|
||||||
|
- [Tweaks Guide](../tweaks/) - Understand system optimizations
|
||||||
|
- [MicroWin Guide](../microwin/) - Create custom Windows ISOs
|
||||||
|
- [FAQ](../../faq/) - Common questions and answers
|
||||||
|
|
||||||
|
## Getting Help
|
||||||
|
|
||||||
|
If you need assistance:
|
||||||
|
|
||||||
|
- **Documentation**: Browse this documentation site
|
||||||
|
- **Known Issues**: Check the [Known Issues](../../knownissues/) page
|
||||||
|
- **Discord**: Join the [community Discord server](https://discord.gg/RUbZUZyByQ)
|
||||||
|
- **GitHub Issues**: Report bugs on [GitHub](https://github.com/ChrisTitusTech/winutil/issues)
|
||||||
|
- **YouTube**: Watch [video tutorials](https://www.youtube.com/watch?v=6UQZ5oQg8XA)
|
||||||
|
|
||||||
|
## Quick Reference Card
|
||||||
|
|
||||||
|
| Task | Location | Action |
|
||||||
|
|------|----------|--------|
|
||||||
|
| Install Apps | Install Tab | Check boxes → Install Selected |
|
||||||
|
| Apply Tweaks | Tweaks Tab | Select tweaks → Run Tweaks |
|
||||||
|
| Undo Tweaks | Tweaks Tab | Select tweaks → Undo Selected Tweaks |
|
||||||
|
| Create Restore Point | Tweaks Tab | Essential Tweaks section |
|
||||||
|
| Fix Network | Config Tab | Fixes → Reset Network |
|
||||||
|
| Change DNS | Tweaks Tab | DNS section |
|
||||||
|
| Open Control Panel | Config Tab | Legacy Windows Panels |
|
||||||
|
|
||||||
|
Happy optimizing! 🚀
|
||||||
@@ -12,7 +12,7 @@ canonifyURLs = true
|
|||||||
path = "github.com/imfing/hextra"
|
path = "github.com/imfing/hextra"
|
||||||
|
|
||||||
[[menu.main]]
|
[[menu.main]]
|
||||||
name = "Documentation"
|
name = "Developer Documentation"
|
||||||
pageRef = "/dev"
|
pageRef = "/dev"
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
|
|||||||
@@ -54,14 +54,9 @@ public class PowerManagement {
|
|||||||
$index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim()
|
$index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim()
|
||||||
Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)"
|
Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)"
|
||||||
|
|
||||||
$copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked
|
|
||||||
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
|
$injectDrivers = $sync.MicrowinInjectDrivers.IsChecked
|
||||||
$importDrivers = $sync.MicrowinImportDrivers.IsChecked
|
$importDrivers = $sync.MicrowinImportDrivers.IsChecked
|
||||||
|
|
||||||
$WPBT = $sync.MicroWinWPBT.IsChecked
|
|
||||||
$unsupported = $sync.MicroWinUnsupported.IsChecked
|
|
||||||
$skipFla = $sync.MicroWinNoFLA.IsChecked
|
|
||||||
|
|
||||||
$importVirtIO = $sync.MicrowinCopyVirtIO.IsChecked
|
$importVirtIO = $sync.MicrowinCopyVirtIO.IsChecked
|
||||||
|
|
||||||
$mountDir = $sync.MicrowinMountDir.Text
|
$mountDir = $sync.MicrowinMountDir.Text
|
||||||
@@ -90,8 +85,11 @@ public class PowerManagement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$imgVersion = (Get-WindowsImage -ImagePath $mountDir\sources\install.wim -Index $index).Version
|
$imgVersion = (Get-WindowsImage -ImagePath "$mountDir\sources\install.wim" -Index $index).Version
|
||||||
|
# Windows Setup is the second index in the boot image.
|
||||||
|
$bootVersion = (Get-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2).Version
|
||||||
Write-Host "The Windows Image Build Version is: $imgVersion"
|
Write-Host "The Windows Image Build Version is: $imgVersion"
|
||||||
|
Write-Host "The WinPE boot image Build Version is: $bootVersion"
|
||||||
|
|
||||||
# Detect image version to avoid performing MicroWin processing on Windows 8 and earlier
|
# Detect image version to avoid performing MicroWin processing on Windows 8 and earlier
|
||||||
if ((Microwin-TestCompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false) {
|
if ((Microwin-TestCompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false) {
|
||||||
@@ -175,33 +173,31 @@ public class PowerManagement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($WPBT) {
|
|
||||||
Write-Host "Disabling WPBT Execution"
|
Write-Host "Disabling WPBT Execution"
|
||||||
reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM"
|
reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM"
|
||||||
reg add "HKLM\zSYSTEM\ControlSet001\Control\Session Manager" /v DisableWpbtExecution /t REG_DWORD /d 1 /f
|
reg add "HKLM\zSYSTEM\ControlSet001\Control\Session Manager" /v DisableWpbtExecution /t REG_DWORD /d 1 /f
|
||||||
reg unload HKLM\zSYSTEM
|
reg unload HKLM\zSYSTEM
|
||||||
}
|
|
||||||
|
|
||||||
if ($skipFla) {
|
|
||||||
Write-Host "Skipping first logon animation..."
|
Write-Host "Skipping first logon animation..."
|
||||||
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
|
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /f
|
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /f
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /ve /t REG_SZ /d "Stop First Logon Animation Process" /f
|
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /f /ve /t REG_SZ /d "Stop First Logon Animation Process"
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /v StubPath /t REG_EXPAND_SZ /d '""%WINDIR%\System32\cmd.exe"" /C ""taskkill /f /im firstlogonanim.exe""' /f
|
reg add "HKLM\zSOFTWARE\Microsoft\Active Setup\Installed Components\CMP_NoFla" /f /v StubPath /t REG_EXPAND_SZ /d '\"%WINDIR%\System32\cmd.exe\" /C \"taskkill /f /im firstlogonanim.exe\"'
|
||||||
reg unload HKLM\zSOFTWARE
|
reg unload HKLM\zSOFTWARE
|
||||||
}
|
|
||||||
|
|
||||||
if ($unsupported) {
|
# We have to prepare the target system to accept the diagnostics script
|
||||||
Write-Host "Bypassing system requirements (locally)"
|
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
|
||||||
reg add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f
|
reg add "HKLM\zSOFTWARE\WinUtil" /f
|
||||||
reg add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f
|
reg add "HKLM\zSOFTWARE\WinUtil" /f /v "ToolboxVersion" /t REG_SZ /d "$($sync.version)"
|
||||||
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f
|
reg add "HKLM\zSOFTWARE\WinUtil" /f /v "MicroWinBuildDate" /t REG_SZ /d "$((Get-Date).ToString('yyMMdd-HHmm'))"
|
||||||
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f
|
|
||||||
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f
|
# REAL software developers set execution policies to unrestricted but, because we're targeting
|
||||||
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f
|
# mainstream population, we have to lower the level of "riskiness" -- set remotesigned; at least that
|
||||||
reg add "HKLM\SYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f
|
# lets us run PWSH scripts that WE create. Execution policies don't really make sense anyway if common sense
|
||||||
reg add "HKLM\SYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
|
# is lacking.
|
||||||
}
|
reg add "HKLM\zSOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /v "ExecutionPolicy" /t REG_SZ /d "RemoteSigned" /f
|
||||||
|
|
||||||
|
reg unload HKLM\zSOFTWARE
|
||||||
|
|
||||||
if ($importVirtIO) {
|
if ($importVirtIO) {
|
||||||
Write-Host "Copying VirtIO drivers..."
|
Write-Host "Copying VirtIO drivers..."
|
||||||
@@ -217,7 +213,10 @@ public class PowerManagement {
|
|||||||
Microwin-RemoveProvisionedPackages -UseCmdlets $true
|
Microwin-RemoveProvisionedPackages -UseCmdlets $true
|
||||||
|
|
||||||
# Detect Windows 11 24H2 and add dependency to FileExp to prevent Explorer look from going back - thanks @WitherOrNot and @thecatontheceiling
|
# Detect Windows 11 24H2 and add dependency to FileExp to prevent Explorer look from going back - thanks @WitherOrNot and @thecatontheceiling
|
||||||
if ((Microwin-TestCompatibleImage $imgVersion $([System.Version]::new(10,0,26100,1))) -eq $true) {
|
# ----- UPDATE UPDATE UPDATE: they fixed this in 10.0.26100.7019. DO NOT DO THIS OTHERWISE IT BREAKS EXPLORER AGAIN BECAUSE THE CHEEKY LITTLE
|
||||||
|
# ----- PoS CHANGED APPRUNTIME.CBS TO APPRUNTIME.CBS.1.6. Thing is, we don't need to patch this in those builds because it no longer breaks
|
||||||
|
# ----- when you don't patch.
|
||||||
|
if (((Microwin-TestCompatibleImage $imgVersion $([System.Version]::new(10,0,26100,1))) -eq $true) -and ((Microwin-TestCompatibleImage $imgVersion $([System.Version]::new(10,0,26100,7019))) -eq $false)) {
|
||||||
try {
|
try {
|
||||||
if (Test-Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" -PathType Leaf) {
|
if (Test-Path "$scratchDir\Windows\SystemApps\MicrosoftWindows.Client.FileExp_cw5n1h2txyewy\appxmanifest.xml" -PathType Leaf) {
|
||||||
# Found the culprit. Do the following:
|
# Found the culprit. Do the following:
|
||||||
@@ -302,11 +301,6 @@ public class PowerManagement {
|
|||||||
Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force
|
Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force
|
||||||
Write-Host "Done copy FirstRun.ps1"
|
Write-Host "Done copy FirstRun.ps1"
|
||||||
|
|
||||||
Write-Host "Copy link to winutil.ps1 into the ISO"
|
|
||||||
$desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop"
|
|
||||||
New-Item -ItemType Directory -Force -Path "$desktopDir"
|
|
||||||
dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default"
|
|
||||||
|
|
||||||
Write-Host "Copy checkinstall.cmd into the ISO"
|
Write-Host "Copy checkinstall.cmd into the ISO"
|
||||||
Microwin-NewCheckInstall
|
Microwin-NewCheckInstall
|
||||||
Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force
|
Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force
|
||||||
@@ -316,7 +310,6 @@ public class PowerManagement {
|
|||||||
New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO"
|
New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO"
|
||||||
|
|
||||||
Write-Host "Loading registry"
|
Write-Host "Loading registry"
|
||||||
reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS"
|
|
||||||
reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default"
|
reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default"
|
||||||
reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat"
|
reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat"
|
||||||
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
|
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE"
|
||||||
@@ -375,9 +368,8 @@ public class PowerManagement {
|
|||||||
Write-Host "Disabling Reserved Storage"
|
Write-Host "Disabling Reserved Storage"
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f
|
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f
|
||||||
|
|
||||||
Write-Host "Changing theme to dark. This only works on Activated Windows"
|
Write-Host "Showing file extensions..."
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f
|
reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
|
||||||
reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f
|
|
||||||
|
|
||||||
if ((Microwin-TestCompatibleImage $imgVersion $([System.Version]::new(10,0,21996,1))) -eq $false) {
|
if ((Microwin-TestCompatibleImage $imgVersion $([System.Version]::new(10,0,21996,1))) -eq $false) {
|
||||||
# We're dealing with Windows 10. Configure sane desktop settings. NOTE: even though stuff to disable News and Interests is there,
|
# We're dealing with Windows 10. Configure sane desktop settings. NOTE: even though stuff to disable News and Interests is there,
|
||||||
@@ -397,7 +389,6 @@ public class PowerManagement {
|
|||||||
Write-Error "An unexpected error occurred: $_"
|
Write-Error "An unexpected error occurred: $_"
|
||||||
} finally {
|
} finally {
|
||||||
Write-Host "Unmounting Registry..."
|
Write-Host "Unmounting Registry..."
|
||||||
reg unload HKLM\zCOMPONENTS
|
|
||||||
reg unload HKLM\zDEFAULT
|
reg unload HKLM\zDEFAULT
|
||||||
reg unload HKLM\zNTUSER
|
reg unload HKLM\zNTUSER
|
||||||
reg unload HKLM\zSOFTWARE
|
reg unload HKLM\zSOFTWARE
|
||||||
@@ -406,9 +397,45 @@ public class PowerManagement {
|
|||||||
Write-Host "Cleaning up image..."
|
Write-Host "Cleaning up image..."
|
||||||
dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase
|
dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase
|
||||||
Write-Host "Cleanup complete."
|
Write-Host "Cleanup complete."
|
||||||
|
$committed = $false
|
||||||
|
$unmounted = $false
|
||||||
|
|
||||||
|
Write-Host "Saving image..."
|
||||||
|
|
||||||
|
try {
|
||||||
|
Save-WindowsImage -Path "$scratchDir"
|
||||||
|
$committed = $true
|
||||||
|
} catch {
|
||||||
|
do {
|
||||||
|
# we'll prevent stuff inside this loop from throwing exceptions and breaking from the loop.
|
||||||
|
try {
|
||||||
|
Save-WindowsImage -Path "$scratchDir"
|
||||||
|
$committed = $true
|
||||||
|
} catch {
|
||||||
|
Write-Host "Commit operation unsuccessful. Trying again after 3 seconds..."
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
}
|
||||||
|
} until ($committed)
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Unmounting image..."
|
Write-Host "Unmounting image..."
|
||||||
Dismount-WindowsImage -Path "$scratchDir" -Save
|
|
||||||
|
try {
|
||||||
|
# because we've already saved the changes earlier, we can safely discard
|
||||||
|
Dismount-WindowsImage -Discard -Path "$scratchDir"
|
||||||
|
$unmounted = $true
|
||||||
|
} catch {
|
||||||
|
do {
|
||||||
|
# we'll prevent stuff inside this loop from throwing exceptions and breaking from the loop.
|
||||||
|
try {
|
||||||
|
Dismount-WindowsImage -Discard -Path "$scratchDir"
|
||||||
|
$unmounted = $true
|
||||||
|
} catch {
|
||||||
|
Write-Host "Unmount operation unsuccessful. Trying again after 3 seconds..."
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
}
|
||||||
|
} until ($unmounted)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -433,20 +460,6 @@ public class PowerManagement {
|
|||||||
}
|
}
|
||||||
Write-Host "Windows image completed. Continuing with boot.wim."
|
Write-Host "Windows image completed. Continuing with boot.wim."
|
||||||
|
|
||||||
$esd = $sync.MicroWinESD.IsChecked
|
|
||||||
if ($esd) {
|
|
||||||
Write-Host "Converting install image to ESD."
|
|
||||||
try {
|
|
||||||
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install.esd" -CompressionType "Recovery"
|
|
||||||
Remove-Item "$mountDir\sources\install.wim"
|
|
||||||
Write-Host "Converted install image to ESD."
|
|
||||||
} catch {
|
|
||||||
Start-Process -FilePath "$env:SystemRoot\System32\dism.exe" -ArgumentList "/export-image /sourceimagefile:`"$mountDir\sources\install.wim`" /sourceindex:1 /destinationimagefile:`"$mountDir\sources\install.esd`" /compress:recovery" -Wait -NoNewWindow
|
|
||||||
Remove-Item "$mountDir\sources\install.wim"
|
|
||||||
Write-Host "Converted install image to ESD."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Next step boot image
|
# Next step boot image
|
||||||
Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
|
Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
|
||||||
Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"
|
Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"
|
||||||
@@ -462,7 +475,6 @@ public class PowerManagement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Loading registry..."
|
Write-Host "Loading registry..."
|
||||||
reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null
|
|
||||||
reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null
|
reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null
|
||||||
reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null
|
reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null
|
||||||
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null
|
reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null
|
||||||
@@ -480,27 +492,86 @@ public class PowerManagement {
|
|||||||
reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
|
reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f
|
||||||
# Fix Computer Restarted Unexpectedly Error on New Bare Metal Install
|
# Fix Computer Restarted Unexpectedly Error on New Bare Metal Install
|
||||||
reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f
|
reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f
|
||||||
|
|
||||||
|
# Force old Setup on 24H2+ WinPE images due to personal preference; it's simply faster and
|
||||||
|
# more reliable than MoSetup. I simply can't stand that new setup system.
|
||||||
|
if ((Microwin-TestCompatibleImage $bootVersion $([System.Version]::new(10,0,26040,0))) -and (Test-Path -Path "$scratchDir\sources\setup.exe" -PathType Leaf)) {
|
||||||
|
reg add "HKLM\zSYSTEM\Setup" /f /v "CmdLine" /t REG_SZ /d "\sources\setup.exe"
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
Write-Error "An unexpected error occurred: $_"
|
Write-Error "An unexpected error occurred: $_"
|
||||||
} finally {
|
} finally {
|
||||||
Write-Host "Unmounting Registry..."
|
Write-Host "Unmounting Registry..."
|
||||||
reg unload HKLM\zCOMPONENTS
|
|
||||||
reg unload HKLM\zDEFAULT
|
reg unload HKLM\zDEFAULT
|
||||||
reg unload HKLM\zNTUSER
|
reg unload HKLM\zNTUSER
|
||||||
reg unload HKLM\zSOFTWARE
|
reg unload HKLM\zSOFTWARE
|
||||||
reg unload HKLM\zSYSTEM
|
reg unload HKLM\zSYSTEM
|
||||||
|
|
||||||
|
$committed = $false
|
||||||
|
$unmounted = $false
|
||||||
|
|
||||||
|
Write-Host "Saving image..."
|
||||||
|
|
||||||
|
try {
|
||||||
|
Save-WindowsImage -Path "$scratchDir"
|
||||||
|
$committed = $true
|
||||||
|
} catch {
|
||||||
|
do {
|
||||||
|
# we'll prevent stuff inside this loop from throwing exceptions and breaking from the loop.
|
||||||
|
try {
|
||||||
|
Save-WindowsImage -Path "$scratchDir"
|
||||||
|
$committed = $true
|
||||||
|
} catch {
|
||||||
|
Write-Host "Commit operation unsuccessful. Trying again after 3 seconds..."
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
}
|
||||||
|
} until ($committed)
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Unmounting image..."
|
Write-Host "Unmounting image..."
|
||||||
Dismount-WindowsImage -Path "$scratchDir" -Save
|
|
||||||
|
try {
|
||||||
|
# because we've already saved the changes earlier, we can safely discard
|
||||||
|
Dismount-WindowsImage -Discard -Path "$scratchDir"
|
||||||
|
$unmounted = $true
|
||||||
|
} catch {
|
||||||
|
do {
|
||||||
|
# we'll prevent stuff inside this loop from throwing exceptions and breaking from the loop.
|
||||||
|
try {
|
||||||
|
Dismount-WindowsImage -Discard -Path "$scratchDir"
|
||||||
|
$unmounted = $true
|
||||||
|
} catch {
|
||||||
|
Write-Host "Unmount operation unsuccessful. Trying again after 3 seconds..."
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
}
|
||||||
|
} until ($unmounted)
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Creating ISO image"
|
Write-Host "Creating ISO image"
|
||||||
|
|
||||||
|
$peToolsPath = ""
|
||||||
|
|
||||||
|
$adkKitsRoot = Microwin-GetKitsRoot -wow64environment $false
|
||||||
|
$adkKitsRoot_WOW64Environ = Microwin-GetKitsRoot -wow64environment $true
|
||||||
|
|
||||||
|
$expectedADKPath = "$($adkKitsRoot)Assessment and Deployment Kit"
|
||||||
|
$expectedADKPath_WOW64Environ = "$($adkKitsRoot_WOW64Environ)Assessment and Deployment Kit"
|
||||||
|
|
||||||
# if we downloaded oscdimg from github it will be in the temp directory so use it
|
# if we downloaded oscdimg from github it will be in the temp directory so use it
|
||||||
# if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe
|
# if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe
|
||||||
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
||||||
$oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
|
$oscdImgFound = Test-Path -Path "$oscdimgPath" -PathType Leaf
|
||||||
if (!$oscdImgFound) {
|
if ((-not ($oscdImgFound)) -and ((Microwin-TestKitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ") -eq $true)) {
|
||||||
$oscdimgPath = "oscdimg.exe"
|
if ($expectedADKPath -ne "Assessment and Deployment Kit") { $peToolsPath = $expectedADKPath }
|
||||||
|
if (($peToolsPath -eq "") -and ($expectedADKPath_WOW64Environ -ne "Assessment and Deployment Kit")) { $peToolsPath = $expectedADKPath_WOW64Environ }
|
||||||
|
|
||||||
|
Write-Host "Using $peToolsPath as the Preinstallation Environment tools path..."
|
||||||
|
# Paths change depending on platform
|
||||||
|
if ([Environment]::Is64BitOperatingSystem) {
|
||||||
|
$oscdimgPath = "$peToolsPath\Deployment Tools\amd64\Oscdimg\oscdimg.exe"
|
||||||
|
} else {
|
||||||
|
$oscdimgPath = "$peToolsPath\Deployment Tools\x86\Oscdimg\oscdimg.exe"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath"
|
Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath"
|
||||||
@@ -511,12 +582,6 @@ public class PowerManagement {
|
|||||||
|
|
||||||
Write-Host "OSCDIMG Error Level : $($oscdimgProc.ExitCode)"
|
Write-Host "OSCDIMG Error Level : $($oscdimgProc.ExitCode)"
|
||||||
|
|
||||||
if ($copyToUSB) {
|
|
||||||
Write-Host "Copying target ISO to the USB drive"
|
|
||||||
Microwin-CopyToUSB("$($SaveDialog.FileName)")
|
|
||||||
if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." }
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host " _____ "
|
Write-Host " _____ "
|
||||||
Write-Host "(____ \ "
|
Write-Host "(____ \ "
|
||||||
Write-Host " _ \ \ ___ ____ ____ "
|
Write-Host " _ \ \ ___ ____ ____ "
|
||||||
|
|||||||
@@ -122,46 +122,60 @@ function Invoke-MicrowinGetIso {
|
|||||||
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
|
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
|
||||||
Invoke-MicrowinBusyInfo -action "wip" -message "Checking system requirements..." -interactive $false
|
Invoke-MicrowinBusyInfo -action "wip" -message "Checking system requirements..." -interactive $false
|
||||||
|
|
||||||
|
$adkKitsRoot = Microwin-GetKitsRoot -wow64environment $false
|
||||||
|
$adkKitsRoot_WOW64Environ = Microwin-GetKitsRoot -wow64environment $true
|
||||||
|
|
||||||
|
$expectedADKPath = "$($adkKitsRoot)Assessment and Deployment Kit"
|
||||||
|
$expectedADKPath_WOW64Environ = "$($adkKitsRoot_WOW64Environ)Assessment and Deployment Kit"
|
||||||
|
|
||||||
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
||||||
$oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf)
|
$oscdImgFound = [bool] (Microwin-TestKitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ") -or (Test-Path $oscdimgPath -PathType Leaf)
|
||||||
Write-Host "oscdimg.exe on system: $oscdImgFound"
|
Write-Host "oscdimg.exe on system: $oscdImgFound"
|
||||||
|
|
||||||
if (!$oscdImgFound) {
|
if (-not ($oscdImgFound)) {
|
||||||
$downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked
|
# First we try to grab it from github, if not, run the ADK installer.
|
||||||
|
if ((Microwin-GetOscdimg -oscdimgPath $oscdimgPath) -eq $true) {
|
||||||
if (!$downloadFromGitHub) {
|
Write-Host "OSCDIMG download succeeded."
|
||||||
# only show the message to people who did check the box to download from github, if you check the box
|
} else {
|
||||||
# you consent to downloading it, no need to show extra dialogs
|
Write-Host "OSCDIMG could not be downloaded from GitHub. Downloading deployment tools..."
|
||||||
[System.Windows.MessageBox]::Show("oscdimg.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.")
|
if (-not (Microwin-GetAdkDeploymentTools)) {
|
||||||
# the step below needs choco to download oscdimg
|
Invoke-MicrowinBusyInfo -action "warning" -message "Neither OSCDIMG nor ADK could be downloaded."
|
||||||
# Install Choco if not already present
|
Write-Host "Neither OSCDIMG nor ADK could be downloaded."
|
||||||
Install-WinUtilChoco
|
|
||||||
$chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco)
|
|
||||||
Write-Host "choco on system: $chocoFound"
|
|
||||||
if (!$chocoFound) {
|
|
||||||
[System.Windows.MessageBox]::Show("choco.exe is not found on the system, you need choco to download oscdimg.exe")
|
|
||||||
return
|
return
|
||||||
}
|
} else {
|
||||||
|
$msg = "ADK/OSCDIMG is installed, now restart this process."
|
||||||
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install windows-adk-oscdimg"
|
|
||||||
$msg = "oscdimg is installed, now close, reopen PowerShell terminal and re-launch winutil.ps1"
|
|
||||||
Invoke-MicrowinBusyInfo -action "done" -message $msg # We set it to done because it immediately returns from this function
|
Invoke-MicrowinBusyInfo -action "done" -message $msg # We set it to done because it immediately returns from this function
|
||||||
[System.Windows.MessageBox]::Show($msg)
|
[System.Windows.MessageBox]::Show($msg)
|
||||||
|
Remove-Item -Path "$env:TEMP\adksetup.exe" -Force -ErrorAction SilentlyContinue
|
||||||
return
|
return
|
||||||
} else {
|
|
||||||
[System.Windows.MessageBox]::Show("oscdimg.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.")
|
|
||||||
Invoke-MicrowinBusyInfo -action "wip" -message "Downloading oscdimg.exe..." -interactive $false
|
|
||||||
Microwin-GetOscdimg -oscdimgPath $oscdimgPath
|
|
||||||
$oscdImgFound = Test-Path $oscdimgPath -PathType Leaf
|
|
||||||
if (!$oscdImgFound) {
|
|
||||||
$msg = "oscdimg was not downloaded can not proceed"
|
|
||||||
Invoke-MicrowinBusyInfo -action "warning" -message $msg
|
|
||||||
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
Write-Host "oscdimg.exe was successfully downloaded from github"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} elseif (Microwin-TestKitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ") {
|
||||||
|
# We have to guess where oscdimg is. We'll check both values...
|
||||||
|
$peToolsPath = ""
|
||||||
|
|
||||||
|
if ($expectedADKPath -ne "Assessment and Deployment Kit") { $peToolsPath = $expectedADKPath }
|
||||||
|
if (($peToolsPath -eq "") -and ($expectedADKPath_WOW64Environ -ne "Assessment and Deployment Kit")) { $peToolsPath = $expectedADKPath_WOW64Environ }
|
||||||
|
|
||||||
|
Write-Host "Using $peToolsPath as the Preinstallation Environment tools path..."
|
||||||
|
# Paths change depending on platform
|
||||||
|
if ([Environment]::Is64BitOperatingSystem) {
|
||||||
|
$oscdimgPath = "$peToolsPath\Deployment Tools\amd64\Oscdimg\oscdimg.exe"
|
||||||
|
} else {
|
||||||
|
$oscdimgPath = "$peToolsPath\Deployment Tools\x86\Oscdimg\oscdimg.exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
# If it's a non-existent file, we won't continue.
|
||||||
|
if (-not (Test-Path -Path "$oscdimgPath" -PathType Leaf)) {
|
||||||
|
$oscdimgFound = $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$oscdImgFound = [bool] (Microwin-TestKitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ") -or (Test-Path $oscdimgPath -PathType Leaf)
|
||||||
|
|
||||||
|
if (-not ($oscdimgFound)) {
|
||||||
|
[System.Windows.MessageBox]::Show("oscdimg.exe is not found on the system. Cannot continue.")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Invoke-MicrowinBusyInfo -action "wip" -message "Checking disk space..." -interactive $false
|
Invoke-MicrowinBusyInfo -action "wip" -message "Checking disk space..." -interactive $false
|
||||||
@@ -209,23 +223,6 @@ function Invoke-MicrowinGetIso {
|
|||||||
# there is probably a better way of doing this, I don't have time to figure this out
|
# there is probably a better way of doing this, I don't have time to figure this out
|
||||||
$sync.MicrowinIsoDrive.Text = $driveLetter
|
$sync.MicrowinIsoDrive.Text = $driveLetter
|
||||||
|
|
||||||
$mountedISOPath = (Split-Path -Path "$filePath")
|
|
||||||
if ($sync.MicrowinScratchDirBox.Text.Trim() -eq "Scratch") {
|
|
||||||
$sync.MicrowinScratchDirBox.Text =""
|
|
||||||
}
|
|
||||||
|
|
||||||
$UseISOScratchDir = $sync.WPFMicrowinISOScratchDir.IsChecked
|
|
||||||
|
|
||||||
if ($UseISOScratchDir) {
|
|
||||||
$sync.MicrowinScratchDirBox.Text=$mountedISOPath
|
|
||||||
}
|
|
||||||
|
|
||||||
if( -Not $sync.MicrowinScratchDirBox.Text.EndsWith('\') -And $sync.MicrowinScratchDirBox.Text.Length -gt 1) {
|
|
||||||
|
|
||||||
$sync.MicrowinScratchDirBox.Text = Join-Path $sync.MicrowinScratchDirBox.Text.Trim() '\'
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Detect if the folders already exist and remove them
|
# Detect if the folders already exist and remove them
|
||||||
if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text)) {
|
if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text)) {
|
||||||
try {
|
try {
|
||||||
@@ -244,13 +241,8 @@ function Invoke-MicrowinGetIso {
|
|||||||
$randomMicrowinScratch = "MicrowinScratch_${timestamp}_${randomNumber}"
|
$randomMicrowinScratch = "MicrowinScratch_${timestamp}_${randomNumber}"
|
||||||
$sync.BusyText.Text=" - Mounting"
|
$sync.BusyText.Text=" - Mounting"
|
||||||
Write-Host "Mounting Iso. Please wait."
|
Write-Host "Mounting Iso. Please wait."
|
||||||
if ($sync.MicrowinScratchDirBox.Text -eq "") {
|
|
||||||
$mountDir = Join-Path $env:TEMP $randomMicrowin
|
$mountDir = Join-Path $env:TEMP $randomMicrowin
|
||||||
$scratchDir = Join-Path $env:TEMP $randomMicrowinScratch
|
$scratchDir = Join-Path $env:TEMP $randomMicrowinScratch
|
||||||
} else {
|
|
||||||
$scratchDir = $sync.MicrowinScratchDirBox.Text+"Scratch"
|
|
||||||
$mountDir = $sync.MicrowinScratchDirBox.Text+"micro"
|
|
||||||
}
|
|
||||||
|
|
||||||
$sync.MicrowinMountDir.Text = $mountDir
|
$sync.MicrowinMountDir.Text = $mountDir
|
||||||
$sync.MicrowinScratchDir.Text = $scratchDir
|
$sync.MicrowinScratchDir.Text = $scratchDir
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
function Microwin-CopyToUSB([string]$fileToCopy) {
|
|
||||||
foreach ($volume in Get-Volume) {
|
|
||||||
if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
|
|
||||||
$destinationPath = "$($volume.DriveLetter):\"
|
|
||||||
#Copy-Item -Path $fileToCopy -Destination $destinationPath -Force
|
|
||||||
# Get the total size of the file
|
|
||||||
$totalSize = (Get-Item "$fileToCopy").length
|
|
||||||
|
|
||||||
Copy-Item -Path "$fileToCopy" -Destination "$destinationPath" -Verbose -Force -Recurse -Container -PassThru |
|
|
||||||
ForEach-Object {
|
|
||||||
# Calculate the percentage completed
|
|
||||||
$completed = ($_.BytesTransferred / $totalSize) * 100
|
|
||||||
|
|
||||||
# Display the progress bar
|
|
||||||
Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB))
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "File copied to Ventoy drive $($volume.DriveLetter)"
|
|
||||||
|
|
||||||
# Detect if config files are present, move them if they are, and configure the Ventoy drive to not bypass the requirements
|
|
||||||
$customVentoyConfig = @'
|
|
||||||
{
|
|
||||||
"control":[
|
|
||||||
{ "VTOY_WIN11_BYPASS_CHECK": "0" },
|
|
||||||
{ "VTOY_WIN11_BYPASS_NRO": "0" }
|
|
||||||
],
|
|
||||||
"control_legacy":[
|
|
||||||
{ "VTOY_WIN11_BYPASS_CHECK": "0" },
|
|
||||||
{ "VTOY_WIN11_BYPASS_NRO": "0" }
|
|
||||||
],
|
|
||||||
"control_uefi":[
|
|
||||||
{ "VTOY_WIN11_BYPASS_CHECK": "0" },
|
|
||||||
{ "VTOY_WIN11_BYPASS_NRO": "0" }
|
|
||||||
],
|
|
||||||
"control_ia32":[
|
|
||||||
{ "VTOY_WIN11_BYPASS_CHECK": "0" },
|
|
||||||
{ "VTOY_WIN11_BYPASS_NRO": "0" }
|
|
||||||
],
|
|
||||||
"control_aa64":[
|
|
||||||
{ "VTOY_WIN11_BYPASS_CHECK": "0" },
|
|
||||||
{ "VTOY_WIN11_BYPASS_NRO": "0" }
|
|
||||||
],
|
|
||||||
"control_mips":[
|
|
||||||
{ "VTOY_WIN11_BYPASS_CHECK": "0" },
|
|
||||||
{ "VTOY_WIN11_BYPASS_NRO": "0" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
'@
|
|
||||||
|
|
||||||
try {
|
|
||||||
Write-Host "Writing custom Ventoy configuration. Please wait..."
|
|
||||||
if (Test-Path -Path "$($volume.DriveLetter):\ventoy\ventoy.json" -PathType Leaf) {
|
|
||||||
Write-Host "A Ventoy configuration file exists. Moving it..."
|
|
||||||
Move-Item -Path "$($volume.DriveLetter):\ventoy\ventoy.json" -Destination "$($volume.DriveLetter):\ventoy\ventoy.json.old" -Force
|
|
||||||
Write-Host "Existing Ventoy configuration has been moved to `"ventoy.json.old`". Feel free to put your config back into the `"ventoy.json`" file."
|
|
||||||
}
|
|
||||||
if (-not (Test-Path -Path "$($volume.DriveLetter):\ventoy")) {
|
|
||||||
New-Item -Path "$($volume.DriveLetter):\ventoy" -ItemType Directory -Force | Out-Null
|
|
||||||
}
|
|
||||||
$customVentoyConfig | Out-File -FilePath "$($volume.DriveLetter):\ventoy\ventoy.json" -Encoding utf8 -Force
|
|
||||||
Write-Host "The Ventoy drive has been successfully configured."
|
|
||||||
} catch {
|
|
||||||
Write-Host "Could not configure Ventoy drive. Error: $($_.Exception.Message)`n"
|
|
||||||
Write-Host "Be sure to add the following configuration to the Ventoy drive by either creating a `"ventoy.json`" file in the `"ventoy`" directory (create it if it doesn't exist) or by editing an existing one: `n`n$customVentoyConfig`n"
|
|
||||||
Write-Host "Failure to do this will cause conflicts with your target ISO file."
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Write-Host "Ventoy USB Key is not inserted"
|
|
||||||
}
|
|
||||||
25
functions/microwin/Microwin-GetAdkDeploymentTools.ps1
Normal file
25
functions/microwin/Microwin-GetAdkDeploymentTools.ps1
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
function Microwin-GetAdkDeploymentTools {
|
||||||
|
<#
|
||||||
|
.DESCRIPTION
|
||||||
|
This function will download the deployment tools from Microsoft
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
Microwin-GetAdkDeploymentTools
|
||||||
|
#>
|
||||||
|
|
||||||
|
# ADK 10.1.28000.1 download link is the same; no need to guess it
|
||||||
|
$adkDownloadLink = "https://download.microsoft.com/download/615540bc-be0b-433a-b91b-1f2b0642bb24/adk/adksetup.exe"
|
||||||
|
$adkVersion = "10.1.28000.1"
|
||||||
|
Write-Host "Downloading ADK version $adkVersion ..."
|
||||||
|
Invoke-WebRequest -UseBasicParsing -Uri "$adkDownloadLink" -OutFile "$env:TEMP\adksetup.exe"
|
||||||
|
|
||||||
|
if ((-not ($?)) -or (-not (Test-Path -Path "$env:TEMP\adksetup.exe" -PathType Leaf))) {
|
||||||
|
Write-Host "ADK could not be downloaded."
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Installing ADK version $adkVersion -- This may take a few minutes..."
|
||||||
|
Start-Process -FilePath "$env:TEMP\adksetup.exe" -ArgumentList "/features OptionId.DeploymentTools /q /ceip off" -Wait
|
||||||
|
|
||||||
|
return $?
|
||||||
|
}
|
||||||
40
functions/microwin/Microwin-GetKitsRoot.ps1
Normal file
40
functions/microwin/Microwin-GetKitsRoot.ps1
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
function Microwin-GetKitsRoot {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Gets the kits root path for the Windows Assessment and Deployment Kit (ADK)
|
||||||
|
.PARAMETER wow64environment
|
||||||
|
Determines whether to search in a WOW64 compatibility environment (HKLM\SOFTWARE\WOW6432Node)
|
||||||
|
.OUTPUTS
|
||||||
|
The path to the kits root
|
||||||
|
#>
|
||||||
|
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true, Position = 0)] [bool]$wow64environment
|
||||||
|
)
|
||||||
|
|
||||||
|
$adk10KitsRoot = ""
|
||||||
|
|
||||||
|
# if we set the wow64 bit on and we're on a 32-bit system, then we prematurely return the value
|
||||||
|
if (($wow64environment -eq $true) -and (-not [Environment]::Is64BitOperatingSystem)) {
|
||||||
|
return $adk10KitsRoot
|
||||||
|
}
|
||||||
|
|
||||||
|
$regPath = ""
|
||||||
|
if ($wow64environment) {
|
||||||
|
$regPath = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots"
|
||||||
|
} else {
|
||||||
|
$regPath = "HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Test-Path "$regPath") -eq $false) {
|
||||||
|
return $adk10KitsRoot
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$adk10KitsRoot = Get-ItemPropertyValue -Path $regPath -Name "KitsRoot10" -ErrorAction Stop
|
||||||
|
} catch {
|
||||||
|
Write-Debug "Could not find ADK."
|
||||||
|
}
|
||||||
|
|
||||||
|
return $adk10KitsRoot
|
||||||
|
}
|
||||||
@@ -15,6 +15,10 @@ function Microwin-GetOscdimg {
|
|||||||
$oscdimgPath = "$env:TEMP\oscdimg.exe"
|
$oscdimgPath = "$env:TEMP\oscdimg.exe"
|
||||||
$downloadUrl = "https://github.com/ChrisTitusTech/winutil/raw/main/releases/oscdimg.exe"
|
$downloadUrl = "https://github.com/ChrisTitusTech/winutil/raw/main/releases/oscdimg.exe"
|
||||||
Invoke-RestMethod -Uri $downloadUrl -OutFile $oscdimgPath
|
Invoke-RestMethod -Uri $downloadUrl -OutFile $oscdimgPath
|
||||||
|
if (-not (Test-Path "$oscdimgPath" -PathType Leaf)) {
|
||||||
|
Write-Host "OSCDIMG could not be downloaded."
|
||||||
|
return $false
|
||||||
|
}
|
||||||
$hashResult = Get-FileHash -Path $oscdimgPath -Algorithm SHA256
|
$hashResult = Get-FileHash -Path $oscdimgPath -Algorithm SHA256
|
||||||
$sha256Hash = $hashResult.Hash
|
$sha256Hash = $hashResult.Hash
|
||||||
|
|
||||||
@@ -23,7 +27,9 @@ function Microwin-GetOscdimg {
|
|||||||
$expectedHash = "AB9E161049D293B544961BFDF2D61244ADE79376D6423DF4F60BF9B147D3C78D" # Replace with the actual expected hash
|
$expectedHash = "AB9E161049D293B544961BFDF2D61244ADE79376D6423DF4F60BF9B147D3C78D" # Replace with the actual expected hash
|
||||||
if ($sha256Hash -eq $expectedHash) {
|
if ($sha256Hash -eq $expectedHash) {
|
||||||
Write-Host "Hashes match. File is verified."
|
Write-Host "Hashes match. File is verified."
|
||||||
|
return $true
|
||||||
} else {
|
} else {
|
||||||
Write-Host "Hashes do not match. File may be corrupted or tampered with."
|
Write-Host "Hashes do not match. File may be corrupted or tampered with."
|
||||||
|
return $false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,6 +103,35 @@ function Microwin-NewFirstRun {
|
|||||||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowRecentList /t REG_DWORD /d 0 /f
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Start" /v ShowRecentList /t REG_DWORD /d 0 /f
|
||||||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_TrackDocs /t REG_DWORD /d 0 /f
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_TrackDocs /t REG_DWORD /d 0 /f
|
||||||
|
|
||||||
|
# Color Modes -- requires sending messages to apply to everything
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f
|
||||||
|
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f
|
||||||
|
|
||||||
|
# Send the WM_SETTINGCHANGE message to all windows
|
||||||
|
Add-Type -TypeDefinition @"
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
public class Win32 {
|
||||||
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
|
||||||
|
public static extern IntPtr SendMessageTimeout(
|
||||||
|
IntPtr hWnd,
|
||||||
|
uint Msg,
|
||||||
|
IntPtr wParam,
|
||||||
|
string lParam,
|
||||||
|
uint fuFlags,
|
||||||
|
uint uTimeout,
|
||||||
|
out IntPtr lpdwResult);
|
||||||
|
}
|
||||||
|
"@
|
||||||
|
|
||||||
|
$HWND_BROADCAST = [IntPtr]0xffff
|
||||||
|
$WM_SETTINGCHANGE = 0x1A
|
||||||
|
$SMTO_ABORTIFHUNG = 0x2
|
||||||
|
$timeout = 100
|
||||||
|
|
||||||
|
# Send the broadcast message to all windows
|
||||||
|
[Win32]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [IntPtr]::Zero, "ImmersiveColorSet", $SMTO_ABORTIFHUNG, $timeout, [ref]([IntPtr]::Zero))
|
||||||
|
|
||||||
Clear-Host
|
Clear-Host
|
||||||
Write-Host "The taskbar will take around a minute to show up, but you can start using your computer now. Try pressing the Windows key to open the Start menu, or Windows + E to launch File Explorer."
|
Write-Host "The taskbar will take around a minute to show up, but you can start using your computer now. Try pressing the Windows key to open the Start menu, or Windows + E to launch File Explorer."
|
||||||
Start-Sleep -Seconds 10
|
Start-Sleep -Seconds 10
|
||||||
|
|||||||
11
functions/microwin/Microwin-TestKitsRootPaths.ps1
Normal file
11
functions/microwin/Microwin-TestKitsRootPaths.ps1
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
function Microwin-TestKitsRootPaths {
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true, Position = 0)] [string]$adkKitsRootPath,
|
||||||
|
[Parameter(Mandatory = $true, Position = 1)] [string]$adkKitsRootPath_WOW64Environ
|
||||||
|
)
|
||||||
|
|
||||||
|
if (Test-Path "$adkKitsRootPath") { return $true }
|
||||||
|
if (Test-Path "$adkKitsRootPath_WOW64Environ") { return $true }
|
||||||
|
|
||||||
|
return $false
|
||||||
|
}
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
|
|
||||||
function Invoke-ScratchDialog {
|
|
||||||
|
|
||||||
<#
|
|
||||||
|
|
||||||
.SYNOPSIS
|
|
||||||
Enable Editable Text box Alternate Scratch path
|
|
||||||
|
|
||||||
.PARAMETER Button
|
|
||||||
#>
|
|
||||||
$sync.WPFMicrowinISOScratchDir.IsChecked
|
|
||||||
|
|
||||||
|
|
||||||
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
|
|
||||||
$Dialog = New-Object System.Windows.Forms.FolderBrowserDialog
|
|
||||||
$Dialog.SelectedPath = $sync.MicrowinScratchDirBox.Text
|
|
||||||
$Dialog.ShowDialog()
|
|
||||||
$filePath = $Dialog.SelectedPath
|
|
||||||
Write-Host "No ISO is chosen+ $filePath"
|
|
||||||
|
|
||||||
if ([string]::IsNullOrEmpty($filePath)) {
|
|
||||||
Write-Host "No Folder had chosen"
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
$sync.MicrowinScratchDirBox.Text = Join-Path $filePath "\"
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -59,7 +59,6 @@ function Invoke-WPFButton {
|
|||||||
"WPFGetIso" {Invoke-MicrowinGetIso}
|
"WPFGetIso" {Invoke-MicrowinGetIso}
|
||||||
"WPFMicrowin" {Invoke-Microwin}
|
"WPFMicrowin" {Invoke-Microwin}
|
||||||
"WPFCloseButton" {Invoke-WPFCloseButton}
|
"WPFCloseButton" {Invoke-WPFCloseButton}
|
||||||
"MicrowinScratchDirBT" {Invoke-ScratchDialog}
|
|
||||||
"WPFWinUtilInstallPSProfile" {Invoke-WinUtilInstallPSProfile}
|
"WPFWinUtilInstallPSProfile" {Invoke-WinUtilInstallPSProfile}
|
||||||
"WPFWinUtilUninstallPSProfile" {Invoke-WinUtilUninstallPSProfile}
|
"WPFWinUtilUninstallPSProfile" {Invoke-WinUtilUninstallPSProfile}
|
||||||
"WPFWinUtilSSHServer" {Invoke-WPFSSHServer}
|
"WPFWinUtilSSHServer" {Invoke-WPFSSHServer}
|
||||||
|
|||||||
@@ -1350,41 +1350,11 @@
|
|||||||
HorizontalAlignment="Stretch">
|
HorizontalAlignment="Stretch">
|
||||||
<StackPanel Name="MicrowinMain" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0">
|
<StackPanel Name="MicrowinMain" Background="{DynamicResource MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0">
|
||||||
<StackPanel Name="MicrowinISOPanel" Background="Transparent" SnapsToDevicePixels="True" Margin="1">
|
<StackPanel Name="MicrowinISOPanel" Background="Transparent" SnapsToDevicePixels="True" Margin="1">
|
||||||
<CheckBox x:Name="WPFMicrowinDownloadFromGitHub" Content="Download oscdimg.exe from CTT GitHub repo" IsChecked="True" Margin="{DynamicResource MicrowinCheckBoxMargin}" />
|
|
||||||
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{DynamicResource ComboBoxForegroundColor}">
|
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{DynamicResource ComboBoxForegroundColor}">
|
||||||
Choose a Windows ISO file that you've downloaded <LineBreak/>
|
Choose a Windows ISO file that you've downloaded <LineBreak/>
|
||||||
Check the status in the console
|
Check the status in the console
|
||||||
</TextBlock>
|
</TextBlock>
|
||||||
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{DynamicResource ComboBoxForegroundColor}" ToolTip="Scratch directories act as a custom destination for image files"><Bold>Scratch directory settings (optional)</Bold></TextBlock>
|
|
||||||
<CheckBox x:Name="WPFMicrowinISOScratchDir" Content="Use ISO directory for ScratchDir " IsChecked="False" Margin="{DynamicResource MicrowinCheckBoxMargin}"
|
|
||||||
ToolTip="Check this to use the path of the ISO file you specify as a scratch directory" />
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*" /> <!-- Takes the remaining space -->
|
|
||||||
<ColumnDefinition Width="30" /> <!-- Fixed width for Button -->
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<TextBox Name="MicrowinScratchDirBox" Background="Transparent" BorderBrush="{DynamicResource MainForegroundColor}"
|
|
||||||
Text="Scratch"
|
|
||||||
Margin="2"
|
|
||||||
IsReadOnly="False"
|
|
||||||
ToolTip="Specify an alternate path for the scratch directory"
|
|
||||||
Grid.Column="0"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Foreground="{DynamicResource LabelboxForegroundColor}">
|
|
||||||
</TextBox>
|
|
||||||
<Button Name="MicrowinScratchDirBT"
|
|
||||||
Width="Auto"
|
|
||||||
Height="Auto"
|
|
||||||
Grid.Column="1"
|
|
||||||
Margin="2"
|
|
||||||
Padding="1" VerticalAlignment="Center">
|
|
||||||
<Button.Content>
|
|
||||||
...
|
|
||||||
</Button.Content>
|
|
||||||
</Button>
|
|
||||||
</Grid>
|
|
||||||
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
|
||||||
<TextBox Name="MicrowinFinalIsoLocation" Background="Transparent" BorderBrush="{DynamicResource MainForegroundColor}"
|
<TextBox Name="MicrowinFinalIsoLocation" Background="Transparent" BorderBrush="{DynamicResource MainForegroundColor}"
|
||||||
Text="ISO location will be printed here"
|
Text="ISO location will be printed here"
|
||||||
Margin="2"
|
Margin="2"
|
||||||
@@ -1458,8 +1428,6 @@
|
|||||||
<CheckBox Name="MicrowinImportDrivers" Content="Import drivers from current system" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Export all third-party drivers from your system and inject them to the MicroWin image"/>
|
<CheckBox Name="MicrowinImportDrivers" Content="Import drivers from current system" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Export all third-party drivers from your system and inject them to the MicroWin image"/>
|
||||||
<CheckBox Name="MicrowinCopyVirtIO" Content="Include VirtIO drivers" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Copy VirtIO Guest Tools drivers to your ISO file. Check this only if you want to use it on QEMU/Proxmox VE"/>
|
<CheckBox Name="MicrowinCopyVirtIO" Content="Include VirtIO drivers" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Copy VirtIO Guest Tools drivers to your ISO file. Check this only if you want to use it on QEMU/Proxmox VE"/>
|
||||||
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<CheckBox Name="WPFMicrowinCopyToUsb" Content="Copy to Ventoy" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Copy to USB disk with a label Ventoy"/>
|
|
||||||
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
|
||||||
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap"><Bold>Custom user settings (leave empty for default user)</Bold></TextBlock>
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap"><Bold>Custom user settings (leave empty for default user)</Bold></TextBlock>
|
||||||
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">User name (20 characters max.):</TextBlock>
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">User name (20 characters max.):</TextBlock>
|
||||||
<TextBox Name="MicrowinUserName" Background="Transparent" BorderThickness="1" BorderBrush="{DynamicResource MainForegroundColor}"
|
<TextBox Name="MicrowinUserName" Background="Transparent" BorderThickness="1" BorderBrush="{DynamicResource MainForegroundColor}"
|
||||||
@@ -1477,11 +1445,6 @@
|
|||||||
Foreground="{DynamicResource LabelboxForegroundColor}"
|
Foreground="{DynamicResource LabelboxForegroundColor}"
|
||||||
/>
|
/>
|
||||||
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{DynamicResource MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap"><Bold>Tweaks (leave empty for default settings)</Bold></TextBlock>
|
|
||||||
<CheckBox Name="MicroWinWPBT" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then allows your computer vendor to execute a program each time it boots. It enables computer vendors to force install anti-theft software, software drivers, or a software program conveniently. This could also be a security risk."><AccessText TextWrapping="Wrap" Text="Disable Windows Platform Binary Table (WPBT) (ADVANCED TWEAK)" /></CheckBox>
|
|
||||||
<CheckBox Name="MicroWinUnsupported" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="If enabled then it will allow you to upgrade your PC to Windows 11 if your PC does not support Windows 11 yet. This is good for if you do not have a USB and want to upgrade to Windows 11 on unsupported hardware."><AccessText TextWrapping="Wrap" Text="Allow this PC to upgrade to Windows 11" /></CheckBox>
|
|
||||||
<CheckBox Name="MicroWinESD" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="The ESD file format compresses the installation image even further, therefore reducing ISO file sizes a little more. Select this if you have a small USB."><AccessText TextWrapping="Wrap" Text="Convert this image to ESD (This will take longer)" /></CheckBox>
|
|
||||||
<CheckBox Name="MicroWinNoFLA" Margin="{DynamicResource MicrowinCheckBoxMargin}" IsChecked="True" ToolTip="The First Logon Animation is an animation that is played when a user logs on for the first time. It can artificially increase wait times. Select this option to automatically close the first logon animation and reach the desktop quicker (additional system preparation will still be done)"><AccessText TextWrapping="Wrap" Text="Skip First Logon Animation" /></CheckBox>
|
|
||||||
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">WinUtil configuration file (JSON)</TextBlock>
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">WinUtil configuration file (JSON)</TextBlock>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
@@ -1564,6 +1527,7 @@
|
|||||||
<Bold>MicroWin features:</Bold><LineBreak/>
|
<Bold>MicroWin features:</Bold><LineBreak/>
|
||||||
- Remove Telemetry and Tracking <LineBreak/>
|
- Remove Telemetry and Tracking <LineBreak/>
|
||||||
- Fast Install using either the "User" local account or the account of your choosing <LineBreak/>
|
- Fast Install using either the "User" local account or the account of your choosing <LineBreak/>
|
||||||
|
- Bypasses Windows 11 System Requirements on unsupported computers <LineBreak/>
|
||||||
- No internet requirement for install <LineBreak/>
|
- No internet requirement for install <LineBreak/>
|
||||||
- Apps debloat <LineBreak/>
|
- Apps debloat <LineBreak/>
|
||||||
<LineBreak/>
|
<LineBreak/>
|
||||||
|
|||||||
Reference in New Issue
Block a user