Skip to content

Latest commit

 

History

History
166 lines (132 loc) · 4.88 KB

File metadata and controls

166 lines (132 loc) · 4.88 KB
title Check execution provider versions in Windows ML
description Learn how to check which version of an execution provider is currently installed in Windows ML.
ms.date 01/06/2026
ms.topic how-to

Check execution provider versions in Windows ML

Most execution providers in Windows ML are dynamically acquired via Windows Update at runtime as seen in install execution providers, and updated versions are automatically updated (with compatible updates) as described in update execution providers, meaning the version of the EP might vary over time.

See the supported execution providers docs to see what execution providers are available and their release history.

Check your end-user's EP version

You can programmatically check the version of an execution provider (EP) that's present on the device by inspecting the PackageId property on ExecutionProvider.

If the EP is not yet present, PackageId will return null.

// Get all EPs compatible with this device
var providers = ExecutionProviderCatalog.GetDefault().FindAllProviders();

// For each provider
foreach (var provider in providers)
{
    // Log the name
    Debug.WriteLine($"Windows ML EP: {provider.Name}");

    // Log the version
    if (provider.PackageId != null)
    {
        var v = provider.PackageId.Version;
        Debug.WriteLine($"Version: {v.Major}.{v.Minor}.{v.Build}.{v.Revision}");
    }
    else
    {
        Debug.WriteLine("Version: Not installed");
    }
}
auto catalog = winrt::Microsoft::Windows::AI::MachineLearning::ExecutionProviderCatalog::GetDefault();
auto providers = catalog.FindAllProviders();

// For each provider
for (auto const& provider : providers)
{
    // Log the name
    OutputDebugString((L"Windows ML EP: " + provider.Name() + L"\n").c_str());

    // Log the version
    auto packageId = provider.PackageId();
    if (packageId)
    {
        auto v = packageId.Version();
        std::wstring versionStr = std::format(L"Version: {}.{}.{}.{}\n",
            v.Major, v.Minor, v.Build, v.Revision);
        OutputDebugString(versionStr.c_str());
    }
    else
    {
        OutputDebugString(L"Version: Not installed\n");
    }
}
#include <WinMLEpCatalog.h>
#include <stdio.h>

// Callback to log each provider's name and version
BOOL CALLBACK LogProviderVersionCallback(
    WinMLEpHandle ep,
    const WinMLEpInfo* info,
    void* context)
{
    // Log the name
    printf("Windows ML EP: %s\n", info->name);

    // Log the version (available directly in the info struct)
    if (info->version != nullptr && info->version[0] != '\0')
    {
        printf("Version: %s\n", info->version);
    }
    else
    {
        printf("Version: Not installed\n");
    }

    return TRUE; // Continue enumeration
}

void CheckAllProviderVersions()
{
    WinMLEpCatalogHandle catalog = nullptr;
    HRESULT hr = WinMLEpCatalogCreate(&catalog);
    if (SUCCEEDED(hr))
    {
        // Enumerate all providers and log their versions
        WinMLEpCatalogEnumProviders(catalog, LogProviderVersionCallback, nullptr);
        WinMLEpCatalogRelease(catalog);
    }
}
catalog = winml.ExecutionProviderCatalog.get_default()
providers = catalog.find_all_providers()

# For each provider
for provider in providers:
    # Log the name
    print(f"Windows ML EP: {provider.name}")

    # Log the version
    if provider.package_id is not None:
        v = provider.package_id.version
        print(f"Version: {v.major}.{v.minor}.{v.build}.{v.revision}")
    else:
        print("Version: Not installed")

On a device with the QNN EP installed, this code outputs the following...

Windows ML EP: QNNExecutionProvider
Version: 1.8.27.0

Check your own device's EP version

You can also easily check which version of an EP is installed on your development device by using PowerShell.

Get-AppxPackage MicrosoftCorporationII.WinML.*

On a device with the QNN EP installed, this outputs the following...

Name              : MicrosoftCorporationII.WinML.Qualcomm.QNN.EP.1.8
Publisher         : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture      : Arm64
ResourceId        :
Version           : 1.8.27.0
...

See also