Flow-Launcher/Flow.Launcher · warning · EngineNotAvailableException

The required service for Windows Index Search does not appea

Error message

The required service for Windows Index Search does not appear to be running

What it means

Thrown as EngineNotAvailableException when a Windows Index (OLE DB / WSearch) call surfaced a COMException and Settings.WarnWindowsSearchServiceOff is true. The exception's Action clears WarnWindowsSearchServiceOff and blanks the query, so the next search silently returns empty results instead of re-warning. The message tells the user the Windows Search service is not running.

Source

Thrown at Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs:106

            return WindowsIndexFilesAndFoldersSearchAsync(search, token: token);
        }

        public IAsyncEnumerable<SearchResult> ContentSearchAsync(string plainSearch, string contentSearch, CancellationToken token)
        {
            return WindowsIndexFileContentSearchAsync(contentSearch, token);
        }

        public IAsyncEnumerable<SearchResult> EnumerateAsync(string path, string search, bool recursive, CancellationToken token)
        {
            return WindowsIndexTopLevelFolderSearchAsync(search, path, recursive, token);
        }

        private IAsyncEnumerable<SearchResult> HandledEngineNotAvailableExceptionAsync()
        {
            if (!Settings.WarnWindowsSearchServiceOff)
                return AsyncEnumerable.Empty<SearchResult>();

            throw new EngineNotAvailableException(
                "Windows Index",
                Localize.plugin_explorer_windowsSearchServiceFix(),
                Localize.plugin_explorer_windowsSearchServiceNotRunning(),
                Constants.WindowsIndexErrorImagePath,
                c =>
                {
                    Settings.WarnWindowsSearchServiceOff = false;

                    // Clears the warning message so user is not mistaken that it has not worked
                    Main.Context.API.ChangeQuery(string.Empty);

                    return ValueTask.FromResult(false);
                });
        }
    }
}

View on GitHub (pinned to 7fc63b07bb)

Solutions

  1. Start the Windows Search service: services.msc > Windows Search > Automatic, then Start.
  2. Rebuild the index from Control Panel > Indexing Options > Advanced > Rebuild if the catalog is corrupt.
  3. Enable the Windows Search optional feature if it was removed.
  4. If the user intentionally does not use Windows Index, switch Settings.IndexSearchEngine to Everything or DirectEnumeration so the COM path is never hit.

Example fix

// before - throw every time the service is off (until user clicks through)
if (!Settings.WarnWindowsSearchServiceOff)
    return AsyncEnumerable.Empty<SearchResult>();
throw new EngineNotAvailableException(...);

// after - check the service once and remember the decision
if (!await IsWindowsSearchRunningAsync())
{
    if (!Settings.WarnWindowsSearchServiceOff) return AsyncEnumerable.Empty<SearchResult>();
    Settings.WarnWindowsSearchServiceOff = false;
    throw new EngineNotAvailableException(...);
}
Defensive patterns

Strategy: try-catch

Validate before calling

using var sc = new System.ServiceProcess.ServiceController("WSearch");
if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Running)
    logger.Warn("Windows Search service (WSearch) is not running.");

Type guard

static bool IsWindowsSearchRunning() { try { using var sc = new System.ServiceProcess.ServiceController("WSearch"); return sc.Status == System.ServiceProcess.ServiceControllerStatus.Running; } catch { return false; } }

Try / catch

try { await manager.SearchAsync(query, token); }
catch (EngineNotAvailableException ex) when (ex.EngineName == "Windows Index") { ShowWindowsSearchOffResult(ex); }

Prevention

When it happens

Trigger: Calling SearchAsync/ContentSearchAsync/EnumerateAsync on WindowsIndexSearchManager when the Windows Search service (WSearch) is stopped, disabled, or its SystemIndex catalog is corrupt and CreateQueryHelper() throws a COMException. PathIsIndexed returning false would not reach this throw; the throw comes from the COM path inside QueryConstructor.CreateQueryHelper().

Common situations: User disabled WSearch for performance; an SSD-tweaking tool disabled the service; the SystemIndex catalog is corrupt and rebuilding; Windows feature 'Windows Search' is turned off in optional features; the service crashed and did not auto-restart.

Related errors


AI-assisted analysis of Flow-Launcher/Flow.Launcher@7fc63b07bb (2026-08-13). Data as JSON: /api/errors/956a869dea9c0598. Report an issue: GitHub.