Site icon EfmSoft

What does Windows error code 1814 (ERROR_RESOURCE_NAME_NOT_FOUND) mean?

 
Previous Next
ERROR_RESOURCE_TYPE_NOT_FOUND ERROR_RESOURCE_LANG_NOT_FOUND

ERROR_RESOURCE_NAME_NOT_FOUND

The resource name or ID does not exist under the selected type.

ERROR_RESOURCE_NAME_NOT_FOUND is Win32 error 1814 (0x716). Resource lookup has reached the requested type in the PE resource tree, but the next key does not match any compiled item. The missing key can be a string name or a numeric identifier. This is often a producer-consumer contract mismatch rather than file corruption.

Why the identifier does not match

  • the application uses an outdated numeric ID after the resource header was regenerated
  • a string resource name was renamed, localized incorrectly, or passed with the wrong spelling
  • conditional compilation excludes the item in one product edition or architecture
  • the requested item belongs to another module, plug-in, or MUI file
  • the installed executable and dependent DLL come from different product builds

Useful resource telemetry

Log the module path and hash, requested type, exact name or integer ID, language preference, product version, calling feature, and the names enumerated beneath that type. Preserve the distinction between integer IDs and text names. If a resource name contains customer data because it was generated dynamically, hash or redact it before telemetry.

How to find the contract break

Enumerate the names under the known-good resource type in the actual loaded image. Compare the result with the shared header, resource script, and binary expected for that release. Verify that MAKEINTRESOURCE is used for integer IDs and that a pointer-sized cast has not converted a numeric ID into an invalid string pointer.

Check package consistency across the executable, plug-ins, and language resources. If only one machine fails, compare file hashes and search paths. If every machine with the same build fails, inspect the build-time identifier mapping and feature flags.

Repair and prevention

Restore the missing resource, update the consumer to the current identifier, or load the correct module. Do not silently fall back to an unrelated item with a nearby numeric value. For optional resources, use an explicit fallback defined by the product contract.

Keep IDs in shared generated headers, validate resource existence in CI, and test mixed-version upgrade paths. An installer should replace tightly coupled binaries atomically so a new caller cannot run against an old resource DLL.

Difference from a missing type or language

ERROR_RESOURCE_TYPE_NOT_FOUND means no matching type exists. ERROR_RESOURCE_LANG_NOT_FOUND means the type and name exist but no acceptable language entry was selected. Error 1814 identifies the middle level of the lookup tree.

Example

A dialog ID changes from 220 to 320 in a regenerated header, but one DLL is not rebuilt. The DLL requests 220 and receives 1814 even though other dialogs load. Rebuilding all consumers with the shared header restores the exact resource contract.

References


Looking for a different code? Search another status or error code.

Exit mobile version