#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : An application will not start -- 0xc0000142, 0xc000007b, 0xc0000005 Fix : Resolve the architecture mismatch Source: https://jbtecwiz.com/support/win-app-launch-0xc0000142 Run as : Elevated PowerShell Expect : 30 minutes Risk : medium Reversible : yes WHEN THIS IS THE RIGHT FIX 0xc000007b specifically. This code means bitness, essentially always. HOW TO UNDO IT Keep a copy of any DLL removed from the application folder until it is proven unnecessary. This script walks the fix one step at a time and asks before each one. Steps with no command are things you do yourself -- it prints those and waits. Run with -DryRun to print without executing. -------------------------------------------------------------------- NO WARRANTY - USE AT YOUR OWN RISK This script is provided by JbTecWiz as-is and with no warranty of any kind, express or implied. You run it entirely at your own risk. JbTecWiz accepts no liability for any loss or damage arising from its use, including but not limited to data loss, downtime, or configuration changes that turn out to be wrong for your system. You are responsible for reading this script before running it, for satisfying yourself that it suits the machine in front of you, and for having a working backup first. Some steps cannot be undone. -------------------------------------------------------------------- #> [CmdletBinding()] param( # Print every step and command without running anything. [switch]$DryRun, # Do not ask before each step. Read the script first if you use this. [switch]$Unattended ) $ErrorActionPreference = 'Stop' $script:Failed = 0 function Write-Rule { param([string]$Text) Write-Host '' Write-Host ('-' * 70) -ForegroundColor DarkGray if ($Text) { Write-Host $Text -ForegroundColor Cyan } } function Show-Prose { param([string]$Text, [string]$Colour = "Gray") if (-not $Text) { return } $words = $Text -split "\s+"; $line = " " foreach ($w in $words) { if (($line.Length + $w.Length) -gt 74) { Write-Host $line -ForegroundColor $Colour; $line = " " } $line += "$w " } if ($line.Trim()) { Write-Host $line -ForegroundColor $Colour } } function Invoke-Step { param( [int]$Number, [string]$Do, [string]$Why, [scriptblock]$Command, [switch]$Manual, [string]$Shell = "powershell" ) Write-Rule " Step $Number of 4" Show-Prose $Do "White" if ($Why) { Write-Host ""; Show-Prose $Why "DarkGray" } if ($Manual) { Write-Host '' Write-Host ' -> Do this yourself, then press Enter to carry on.' -ForegroundColor Yellow if (-not $Unattended -and -not $DryRun) { [void](Read-Host) } return } Write-Host '' foreach ($l in ($Command.ToString().Trim() -split "`n")) { Write-Host (" " + $l.Trim()) -ForegroundColor Green } Write-Host '' if ($DryRun) { Write-Host " (dry run -- not executed)" -ForegroundColor DarkGray; return } if (-not $Unattended) { $a = Read-Host " Run this step? [Y]es / [S]kip / [Q]uit" if ($a -match "^[Qq]") { Write-Host " Stopped at your request."; exit 0 } if ($a -match "^[Ss]") { Write-Host " Skipped." -ForegroundColor DarkGray; return } } try { & $Command } catch { $script:Failed++ Write-Host (" Step $Number failed: " + $_.Exception.Message) -ForegroundColor Red Show-Prose "The rest of the fix may depend on this. Read the write-up before carrying on." "Red" if (-not $Unattended) { $c = Read-Host " Carry on anyway? [y/N]" if ($c -notmatch "^[Yy]") { exit 1 } } } } Write-Rule Write-Host ' An application will not start -- 0xc0000142, 0xc000007b, 0xc0000005' -ForegroundColor White Write-Host ' Resolve the architecture mismatch' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: medium Reversible 30 minutes' Write-Host '' Show-Prose 'No warranty. Use at your own risk - JbTecWiz accepts no liability. Read it before you run it, and have a backup.' 'DarkYellow' Write-Rule if (-not $Unattended -and -not $DryRun) { $go = Read-Host ' Ready? [y/N]' if ($go -notmatch "^[Yy]") { Write-Host " Nothing was changed."; exit 0 } } Invoke-Step -Number 1 -Do 'Establish whether the executable is 32 or 64-bit.' -Why '8664 is x64, 014C is x86, AA64 is ARM64. Knowing which you have decides which runtime to install and stops the guessing that makes this fault take an afternoon.' -Command { $p='C:\Program Files\App\app.exe' $fs=[IO.File]::OpenRead($p);$br=New-Object IO.BinaryReader($fs) $fs.Seek(0x3C,'Begin')|Out-Null;$peOff=$br.ReadInt32() $fs.Seek($peOff+4,'Begin')|Out-Null '{0:X4}' -f $br.ReadUInt16() $br.Close() } Invoke-Step -Number 2 -Do 'Install the matching runtime -- a 32-bit application needs the x86 redistributable regardless of the machine.' -Manual Invoke-Step -Number 3 -Do 'Check for DLLs of the wrong architecture sitting in the application folder, usually copied there by a well-meaning fix from a forum. Remove them and let the application use the system copies.' -Manual Invoke-Step -Number 4 -Do 'Reinstall the application cleanly if the folder has been tampered with.' -Manual Write-Rule " Confirm it worked" Show-Prose 'The application launches and Process Explorer shows it loading DLLs from the expected directories.' 'White' Write-Rule if ($script:Failed -gt 0) { Write-Host (" Finished with " + $script:Failed + " failed step(s).") -ForegroundColor Yellow Show-Prose 'Read the full write-up at https://jbtecwiz.com/support/win-app-launch-0xc0000142' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: Keep a copy of any DLL removed from the application folder until it is proven unnecessary.' 'DarkGray' Write-Rule