Add friendly explanations for common DISM exit codes (#5087)

* Add friendly explanations for common DISM exit codes

Invoke-WinUtilISODism threw only a raw exit code on DISM failure
(e.g. "DISM add-driver failed with exit code 112"), leaving users to
look up what the number means themselves.

Adds a $knownExitCode lookup table mapping common Windows/DISM exit
codes (disk full, access denied, file/path not found, file in use,
timeout, etc.) to plain-English explanations. When a failure's exit
code is recognized, the thrown message now includes the explanation
in parentheses; unrecognized codes fall back to the original
plain-number message.

Verified the script still parses correctly after the change.

* Add missing period to fallback DISM error message

* Add tests for DISM known/unknown exit code error messages

Adds a test verifying a known exit code (112) produces the friendly
explanation in the thrown message, alongside the existing test
verifying an unrecognized code still falls back to the plain
numeric message.

Verified: all 35 tests in win11creator.Tests.ps1 pass.

* Document DISM friendly error messages in Win11 Creator troubleshooting

Adds a Troubleshooting table row explaining the new DISM error
message format (exit code + explanation in parentheses), with
guidance for the most common cases and a link to Microsoft's full
error code reference for anything not explained.

* Fix duplicate DISM calls in unmapped exit code test

The unmapped-code test called Invoke-WinUtilISOScript twice — once
via Should -Throw, once to capture the message for the no-parens
check — causing $script:dismCalls to double-count. Consolidated to
a single call, checking both the exit code and the absence of a
parenthesized explanation against one captured exception message.

Verified: all 36 tests in win11creator.Tests.ps1 pass.

* Fix broken DISM error code reference link in docs

Replaced the dead windows-hardware/manufacture link with Microsoft's
actual System Error Codes reference page, which DISM exit codes
correspond to.

* Strengthen DISM fallback regression coverage

---------

Co-authored-by: Chris Titus <contact@christitus.com>
This commit is contained in:
Kristian
2026-09-29 11:17:51 -05:00
committed by GitHub
co-authored by Chris Titus
parent 8939ecf4b4
commit fc03af421b
3 changed files with 124 additions and 1 deletions
+20 -1
View File
@@ -185,6 +185,21 @@ function Invoke-WinUtilISOScript {
return @($survivingFolders)
}
$knownExitCode = @{
112 = "Disk is full"
5 = "Access denied"
2 = "File not found"
3 = "Path not found"
87 = "Invalid parameter"
1168 = "Element not found"
1392 = "File or directory is corrupted"
32 = "File in use / sharing violation"
21 = "Device not ready"
1460 = "Operation timed out"
1223 = "Operation cancelled by user"
50 = "Request not supported"
}
function Invoke-WinUtilISODism {
param (
[Parameter(Mandatory)][string[]]$Arguments,
@@ -199,7 +214,11 @@ function Invoke-WinUtilISOScript {
& $Logger " dism[$Operation]: $line"
}
}
throw "DISM $Operation failed with exit code $exitCode."
if ($knownExitCode.ContainsKey($exitCode)) {
throw "DISM $Operation failed with exit code $exitCode ($($knownExitCode[$exitCode]))."
} else {
throw "DISM $Operation failed with exit code $exitCode."
}
}
if ($Operation -ne 'metadata') {
& $Logger "DISM $Operation completed."