fix full button width

This commit is contained in:
Chris Titus
2026-02-25 11:05:45 -06:00
parent 410d3c5056
commit 773ea3a950
2 changed files with 52 additions and 23 deletions

View File

@@ -17,7 +17,7 @@ function Invoke-WinUtilISORefreshUSBDrives {
foreach ($disk in $removable) { foreach ($disk in $removable) {
$sizeGB = [math]::Round($disk.Size / 1GB, 1) $sizeGB = [math]::Round($disk.Size / 1GB, 1)
$label = "Disk $($disk.Number): $($disk.FriendlyName) [$sizeGB GB] $($disk.PartitionStyle)" $label = "Disk $($disk.Number): $($disk.FriendlyName) [$sizeGB GB] - $($disk.PartitionStyle)"
$combo.Items.Add($label) $combo.Items.Add($label)
} }
$combo.SelectedIndex = 0 $combo.SelectedIndex = 0
@@ -38,7 +38,7 @@ function Invoke-WinUtilISOWriteUSB {
if (-not $contentsDir -or -not (Test-Path $contentsDir)) { if (-not $contentsDir -or -not (Test-Path $contentsDir)) {
[System.Windows.MessageBox]::Show( [System.Windows.MessageBox]::Show(
"No modified ISO content found. Please complete Steps 13 first.", "No modified ISO content found. Please complete Steps 1-3 first.",
"Not Ready", "OK", "Warning") "Not Ready", "OK", "Warning")
return return
} }
@@ -107,28 +107,54 @@ function Invoke-WinUtilISOWriteUSB {
return $null return $null
} }
# ── Diskpart script: clean + GPT + format only (no assign) ────────── # ── Phase 1: Clean the disk via diskpart ────────────────────────────
# We intentionally omit "assign" here and let PowerShell assign letters # Only run "clean" here. "convert gpt" in diskpart requires the disk to
# explicitly below. diskpart's "assign" can silently fail on drives that # already be MBR; after a clean the disk is RAW, so convert gpt fails on
# previously had letter bindings still present in the registry, which is # many systems. We use Initialize-Disk (which accepts RAW disks) instead.
# the root cause of the "could not locate partition" error. $dpScript1 = @"
$dpScript = @"
select disk $diskNum select disk $diskNum
clean clean
convert gpt exit
create partition efi size=512 "@
format quick fs=fat32 label="SYSTEM" $dpFile1 = Join-Path $env:TEMP "winutil_diskpart_$(Get-Random).txt"
$dpScript1 | Set-Content -Path $dpFile1 -Encoding ASCII
Log "Running diskpart clean on Disk $diskNum..."
$dpOut1 = diskpart /s $dpFile1 2>&1
Remove-Item $dpFile1 -Force -ErrorAction SilentlyContinue
$dpOut1 | Where-Object { $_ -match '\S' } | ForEach-Object { Log " diskpart: $_" }
# ── Phase 2: Initialize as GPT via PowerShell ────────────────────────
# After "clean", Windows may still see the disk as initialized (stale
# metadata). Initialize-Disk only accepts RAW disks; Set-Disk handles
# already-initialized (MBR/GPT) disks with no partitions. Try both.
Start-Sleep -Seconds 2
Update-Disk -Number $diskNum -ErrorAction SilentlyContinue
$diskObj = Get-Disk -Number $diskNum -ErrorAction Stop
if ($diskObj.PartitionStyle -eq 'RAW') {
Initialize-Disk -Number $diskNum -PartitionStyle GPT -ErrorAction Stop
Log "Disk $diskNum initialized as GPT."
} else {
Set-Disk -Number $diskNum -PartitionStyle GPT -ErrorAction Stop
Log "Disk $diskNum converted to GPT (was $($diskObj.PartitionStyle))."
}
# ── Phase 3: Create partitions via diskpart ──────────────────────────
# "create partition efi" is not supported on removable media.
# A single FAT32 primary partition is all that is needed for a UEFI-
# bootable Windows install USB the firmware locates \EFI\Boot\bootx64.efi
# on any FAT32 volume regardless of GPT partition type.
$dpScript2 = @"
select disk $diskNum
create partition primary create partition primary
format quick fs=fat32 label="WINPE" format quick fs=fat32 label="WINPE"
exit exit
"@ "@
$dpFile = Join-Path $env:TEMP "winutil_diskpart_$(Get-Random).txt" $dpFile2 = Join-Path $env:TEMP "winutil_diskpart2_$(Get-Random).txt"
$dpScript | Set-Content -Path $dpFile -Encoding ASCII $dpScript2 | Set-Content -Path $dpFile2 -Encoding ASCII
Log "Running diskpart on Disk $diskNum..." Log "Creating partitions on Disk $diskNum..."
$dpOut = diskpart /s $dpFile 2>&1 $dpOut2 = diskpart /s $dpFile2 2>&1
Remove-Item $dpFile -Force -ErrorAction SilentlyContinue Remove-Item $dpFile2 -Force -ErrorAction SilentlyContinue
# Log diskpart output for diagnostics $dpOut2 | Where-Object { $_ -match '\S' } | ForEach-Object { Log " diskpart: $_" }
$dpOut | Where-Object { $_ -match '\S' } | ForEach-Object { Log " diskpart: $_" }
SetProgress "Assigning drive letters..." 30 SetProgress "Assigning drive letters..." 30
Start-Sleep -Seconds 3 # allow Windows to settle after partition creation Start-Sleep -Seconds 3 # allow Windows to settle after partition creation
@@ -169,7 +195,7 @@ exit
$wimSizeMB = [math]::Round((Get-Item $installWim).Length / 1MB) $wimSizeMB = [math]::Round((Get-Item $installWim).Length / 1MB)
if ($wimSizeMB -gt 3800) { if ($wimSizeMB -gt 3800) {
# FAT32 limit split with DISM # FAT32 limit split with DISM
Log "install.wim is $wimSizeMB MB splitting for FAT32 compatibility..." Log "install.wim is $wimSizeMB MB - splitting for FAT32 compatibility...This will take several minutes."
$splitDest = Join-Path $usbDrive "sources\install.swm" $splitDest = Join-Path $usbDrive "sources\install.swm"
New-Item -ItemType Directory -Path (Split-Path $splitDest) -Force | Out-Null New-Item -ItemType Directory -Path (Split-Path $splitDest) -Force | Out-Null
Split-WindowsImage -ImagePath $installWim ` Split-WindowsImage -ImagePath $installWim `

View File

@@ -1353,7 +1353,7 @@
<!-- ═══════════════════════════════════════════════════════════ --> <!-- ═══════════════════════════════════════════════════════════ -->
<!-- STEP 1 : Select Windows 11 ISO --> <!-- STEP 1 : Select Windows 11 ISO -->
<!-- ═══════════════════════════════════════════════════════════ --> <!-- ═══════════════════════════════════════════════════════════ -->
<Border Grid.Row="0" Name="WPFWin11ISOSelectSection" Style="{StaticResource BorderStyle}"> <Border Grid.Row="0" Name="WPFWin11ISOSelectSection" Style="{StaticResource BorderStyle}" HorizontalAlignment="Left" MinWidth="{DynamicResource ButtonWidth}">
<Grid Margin="5"> <Grid Margin="5">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@@ -1449,7 +1449,8 @@
<Border Grid.Row="1" <Border Grid.Row="1"
Name="WPFWin11ISOMountSection" Name="WPFWin11ISOMountSection"
Style="{StaticResource BorderStyle}" Style="{StaticResource BorderStyle}"
Visibility="Collapsed"> Visibility="Collapsed"
HorizontalAlignment="Left" MinWidth="{DynamicResource ButtonWidth}">
<Grid Margin="5"> <Grid Margin="5">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
@@ -1514,7 +1515,8 @@
<Border Grid.Row="2" <Border Grid.Row="2"
Name="WPFWin11ISOModifySection" Name="WPFWin11ISOModifySection"
Style="{StaticResource BorderStyle}" Style="{StaticResource BorderStyle}"
Visibility="Collapsed"> Visibility="Collapsed"
HorizontalAlignment="Left" MinWidth="{DynamicResource ButtonWidth}">
<StackPanel Margin="5"> <StackPanel Margin="5">
<TextBlock FontSize="{DynamicResource FontSize}" FontWeight="Bold" <TextBlock FontSize="{DynamicResource FontSize}" FontWeight="Bold"
Foreground="{DynamicResource MainForegroundColor}" Margin="0,0,0,8"> Foreground="{DynamicResource MainForegroundColor}" Margin="0,0,0,8">
@@ -1542,7 +1544,8 @@
<Border Grid.Row="3" <Border Grid.Row="3"
Name="WPFWin11ISOOutputSection" Name="WPFWin11ISOOutputSection"
Style="{StaticResource BorderStyle}" Style="{StaticResource BorderStyle}"
Visibility="Collapsed"> Visibility="Collapsed"
HorizontalAlignment="Left" MinWidth="{DynamicResource ButtonWidth}">
<StackPanel Margin="5"> <StackPanel Margin="5">
<!-- Header row: title + Clean & Reset button --> <!-- Header row: title + Clean & Reset button -->
<Grid Margin="0,0,0,12"> <Grid Margin="0,0,0,12">