cefsharp/CefSharp · critical · ApplicationException
Current OS version is less than Windows 10. Applications not
Error message
Current OS version is less than Windows 10. Applications not manifested for Windows 10 throw this exception, even if the current operating system version is Windows 10. To manifest your applications for Windows 10, see https://learn.microsoft.com/en-us/windows/win32/sysinfo/targeting-your-application-at-windows-8-1.
What it means
Thrown by CefSharp.Core.Cef.AssertIsWindows10OrGreater() when IsWindows10OrGreater() returns false. CEF/Chromium features in recent CefSharp builds require Windows 10 or later. The check uses the OS-version manifest API, so an app that is not manifested for Windows 10 reports an older version even when it actually runs on Windows 10/11. The exception is therefore as much a manifest problem as an OS problem.
Source
Thrown at CefSharp.Core/Cef.cs:770
/// Applications not manifested for Windows 10 return false, even if the current operating system version is Windows 10.
/// To manifest your applications for Windows 10, see https://learn.microsoft.com/en-us/windows/win32/sysinfo/targeting-your-application-at-windows-8-1.
/// </summary>
/// <returns>True if the current OS version matches, or is greater than, the Windows 10 version; otherwise, false.</returns>
public static bool IsWindows10OrGreater()
{
return Core.Cef.IsWindows10OrGreaterEx();
}
/// <summary>
/// If the current OS version matches, or is greater than, the Windows 10 version then this method does nothing.
/// Applications not manifested for Windows 10 will throw an <see cref="ApplicationException"/>, even if the current operating system version is Windows 10.
/// To manifest your applications for Windows 10, see https://learn.microsoft.com/en-us/windows/win32/sysinfo/targeting-your-application-at-windows-8-1.
/// </summary>
/// <exception cref="ApplicationException"></exception>
public static void AssertIsWindows10OrGreater()
{
if (!IsWindows10OrGreater())
throw new ApplicationException("Current OS version is less than Windows 10. Applications not manifested for Windows 10 throw this exception, even if the current operating system version is Windows 10. To manifest your applications for Windows 10, see https://learn.microsoft.com/en-us/windows/win32/sysinfo/targeting-your-application-at-windows-8-1.");
}
/// <summary>
/// Returns the numeric ID value for an IDC <paramref name="name"/> from cef_command_ids.h or -1
/// if <paramref name="name"/> is unrecognized by the current CEF/Chromium build.
/// </summary>
/// <remarks>
/// This function wraps the Cef <c>cef_id_for_command_id_name</c> method.
/// It provides version-safe mapping of command IDC names to version-specific
/// numeric ID values. Numeric ID values are likely to change across
/// CEF/Chromium versions but names generally remain the same.
/// </remarks>
/// <param name="name">String identifier of the Chromium command.</param>
/// <returns>version-specific numeric ID value for the command if recognized; otherwise, -1.</returns>
public static int MapChromeCommandNameToId(string name)
{
return Core.Cef.MapChromeCommandNameToId(name);
}View on GitHub (pinned to 16bc6e0711)
Solutions
- Add an app.manifest to your executable project and include the Windows 10 compatible GUID: <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" /> (also include the Win8/8.1 GUIDs for completeness).
- Set the manifest as the project's default manifest (Project Properties -> Application -> Manifest) so it ships with the build.
- If you must support pre-Windows 10 hosts, downgrade to the last CefSharp/CEF branch that still supports that OS (e.g. CefSharp 75/79 era), as the Win10 floor is enforced by Chromium itself.
- Verify the fix by calling Cef.IsWindows10OrGreater() before Initialize; it should return true on a real Win10/11 box once manifested.
Example fix
// before (no manifest) -> throws even on Windows 10
Cef.Initialize(settings);
// app.manifest (add to executable project, set as default manifest)
<!-- in compatibility section -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings/>
</application>
<!-- in dependency/os section -->
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" /> <!-- Windows 10/11 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" /> <!-- Windows 8.1 -->
</application>
</compatibility> Defensive patterns
Strategy: validation
Validate before calling
// Call before Cef.Initialize to decide whether to proceed at all.
if (!CefSharp.Cef.IsWindows10OrGreater())
{
// Either warn the user or fall back to a legacy CefSharp build.
MessageBox.Show("This application requires Windows 10 or later.");
return;
} Type guard
// Indicates whether AssertIsWindows10OrGreater will pass without throwing. public static bool CanAssertWindows10OrGreater() => CefSharp.Cef.IsWindows10OrGreater();
Try / catch
try { CefSharp.Cef.AssertIsWindows10OrGreater(); }
catch (ApplicationException ex)
{
// Log and surface a user-facing message about manifest / OS requirements.
logger.Error(ex, "Windows 10 requirement not met (check app manifest).");
} Prevention
- Ship an app.manifest with the Windows 10 supportedOS GUID in every executable project
- Call Cef.IsWindows10OrGreater() during startup and fail with a clear message before Initialize
- Pin a CefSharp branch consistent with your minimum supported OS
When it happens
Trigger: Calling Cef.Initialize on, or any code path that reaches Cef.AssertIsWindows10OrGreater() on, a host that is genuinely pre-Windows 10, or an executable whose manifest lacks the Windows 10 supportedOS GUID {8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}. On a correctly manifested Win10/11 box this never fires.
Common situations: New CefSharp project run from Visual Studio without an app.manifest (the default VS manifest targets Win8.1); deploying to a Windows Server 2012 R2 / Windows 7 / Server 2008 R2 machine; CI test runner whose host image is older than Win10; upgrading CefSharp to a build that now enforces the Win10 floor.
Related errors
- IBrowser
- Unable to add MessageId {0} to queuedCommandResults Concurre
- Unable to invoke ExecuteDevToolsMethod on CEF UI Thread.
- Failed to execute dev tools method {0}.
- Generated MessageId {0} doesn't match returned Message Id {1
AI-assisted analysis of cefsharp/CefSharp@16bc6e0711 (2026-08-13).
Data as JSON: /api/errors/87330aff19becf23.
Report an issue: GitHub.