0XC0000249

STATUS_IMAGE_MP_UP_MISMATCH (0XC0000249) — App Won't Start

App fails to launch with this error on Windows because a DLL or executable is missing a multiprocessor support patch. The fix is replacing the file.

You try to launch an application — maybe an old game, a custom tool, or something that came from an older Windows install — and instead of the window you expect, you get an error dialog with code 0XC0000249 and the text STATUS_IMAGE_MP_UP_MISMATCH. The app won't start at all. This usually happens right after moving a program folder or restoring files from a backup, not during a fresh install.

What's Actually Happening Here

The error code tells you exactly what's wrong: MP stands for multiprocessor, UP stands for uniprocessor. Windows is telling you that the executable or one of its DLLs was compiled for a uniprocessor system but is now running on a multiprocessor system — or vice versa. The critical thing to understand is that this isn't a compatibility setting you can toggle. It's baked into the binary's internal structure.

What's actually happening here is that the file in question was built as a uniprocessor hotpatch image — a special variant used by older Windows kernels for single-core systems. When Windows loads it on a multicore CPU (which is basically every modern PC), it sees the mismatch and refuses to run the image. The loader checks the IMAGE_FILE_UP_SYSTEM_ONLY flag in the PE header. If that flag is set and the system has more than one processor, you get this error.

This error is rare these days — it mostly shows up with legacy software or when you've moved an old Windows installation's system files into a newer OS. You might also trigger it by copying a .exe or .dll from a Windows NT 4.0 or early Windows 2000 install.

The Fix: Replace the Mismatched File

There's no registry key or group policy that fixes this. The only solution is to replace the offending file with a correct multiprocessor build. Here's how to find and replace it.

Step 1: Identify Which File Is the Problem

Windows will tell you in the error dialog — look at the top bar or the message body. It usually says something like "Filename.exe - Application Error" and includes the DLL or EXE name in the text. If the dialog doesn't show it clearly, check the Windows Event Viewer under Windows Logs > Application. Look for an event with ID 1000 or 1001 and search for the faulting module name.

Step 2: Check if the File Is Part of the System

If the file is something like KERNEL32.DLL, NTDLL.DLL, or another system DLL, you're looking at a system file corruption or a bad migration. Run this command as Administrator to repair system files:

sfc /scannow

Then reboot. If it still fails, dism can fix the store:

dism /online /cleanup-image /restorehealth

If the file is a third-party DLL or EXE, move to the next step.

Step 3: Replace the Application File

For a third-party app, the correct multiprocessor version is almost certainly the one from a fresh install of the same software. Uninstall the app completely, then reinstall it from the original installer. If you don't have the installer, download it from the official source — not some random mirror.

If the app is a standalone executable that you copied from a backup, don't copy it back. Instead, find the original distribution archive (a ZIP, an ISO, a MSI) and extract a fresh copy. The reason step 3 works is that modern installers always use multiprocessor-safe binaries — the uniprocessor hotpatch builds died out around Windows 2000.

Step 4: If It's a Custom DLL From an Old Project

If you wrote the DLL yourself or it's from an open-source project, you need to recompile it with the /NXCOMPAT linker flag and without the /GS- flag that sometimes triggers this. In Visual Studio, check the project settings under Linker > Advanced and make sure Image Has Safe Exception Handlers is set properly. But honestly, the real fix is to just get a binary compiled for the right target.

What to Check If It Still Fails

If the error persists, you have one of two problems:

  • You replaced the wrong file. The error might be caused by a dependency chain — app.exe loads a.dll, which loads b.dll, and b.dll is the one with the mismatch. Use Process Monitor to see which DLL fails to load. Filter on the process name and look for NAME NOT FOUND or PATH NOT FOUND results — though this error usually shows up as a successful open with a subsequent load failure.
  • The file is genuine but truly is a uniprocessor-only build. Some very old software (DOS-era stuff running under NTVDM or 16-bit Windows apps) simply cannot run on a multiprocessor system. In that case, your only option is to run the app inside a virtual machine running a single-core Windows version. VirtualBox or VMware with a single CPU assigned to the VM works.

Skip the idea of hex-editing the PE header — it's not just a flag, the actual code inside is written assuming single-core behavior. Changing the flag will crash the app in a more spectacular way. The only clean solution is the right binary.

Related Errors in Windows Errors
0X00003628 Fix ERROR_IPSEC_IKE_DH_FAILURE (0X00003628) – Diffie-Hellman Mismatch 0X80041319 SCHED_E_MISSINGNODE (0X80041319) – Task XML missing element fix 0X0000099A Fix 0X0000099A NERR_PasswordMismatch on Windows Server 0XC022001E STATUS_FWP_INVALID_FLAGS (0XC022001E) – Quick Fix

Was this solution helpful?

EP
Erropedia Team
Tech Support Editors
The Erropedia editorial team researches and documents real-world tech errors from across Windows, Linux, macOS, networking, databases, cloud platforms, and more. Every solution is reviewed for accuracy and updated as software and systems evolve.