Security Compliance

"Publishing Operation Failed: Too Many Locally Published Categories" in Patch Manager

When attempting to publish 3rd-party updates via SolarWinds Patch Manager (SPM), the publish operation fails with the following error: Details: Failed to publish [Package Name]. Publishing operation failed, too many locally published categories. This article explains why this error occurs, why custom SQL queries may show a lower count than expected, and the correct remediation steps to resolve it.

First published date

5/20/2026 1:57 PM

Last published date

5/27/2026 2:15 PM

Overview

WSUS enforces a hard limit of 100 locally published categories. This limit is imposed by the WSUS API itself (a Microsoft design constraint) and cannot be raised or bypassed from within Patch Manager.

Each unique ProductName value in a published package's SDP XML creates a new category entry in WSUS. When customers publish many diverse 3rd-party packages over time (for example, FileZilla, 7-Zip, Adobe Reader, etc.), the accumulated unique product and vendor names exhaust this limit. Once the limit is reached, the WSUS API blocks any new publish attempt with the error above.

Why Your SQL Count May Be Lower Than the WSUS-Enforced Total

Many SQL scripts and 3rd-party KB articles only count Product-level categories. WSUS, however, counts both the Vendor/Company and Product entries together. In addition, orphaned categories left behind by previously removed packages can still be counted by WSUS even if they no longer appear in a standard SQL query. This is why a raw SQL count of 62 or 82 can still trigger the limit that WSUS enforces as 100.

Symptoms

  • Publishing any 3rd-party package in SPM fails with: Publishing operation failed, too many locally published categories

  • Running the WSUS Server Cleanup Wizard does not resolve the error

  • Custom SQL queries against SUSDB return a category count below 100, but the error persists

  • Other packages that were previously publishing successfully may also begin to fail

Product section

Patch Manager

Cause

SPM is working as Designed, WSUS enforces a hard limit of 100 locally published categories.

 

 

Resolution

Follow the steps below in order. The sequence is critical — running the cleanup wizard before expiring packages in SPM has no effect on locally published categories.

Step 1 — Get an Accurate Category Count via SUSDB

Connect to SUSDB via SQL Server Management Studio (SSMS) and run the following validated query. The TotalCategories value must be below 100 for publishing to succeed.


-- Scripts are not supported under any SolarWinds support program or service.
-- Scripts are provided AS IS without warranty of any kind. SolarWinds further
-- disclaims all warranties including, without limitation, any implied warranties
-- of merchantability or of fitness for a particular purpose. The risk arising
-- out of the use or performance of the scripts and documentation stays with you.
-- In no event shall SolarWinds or anyone else involved in the creation,
-- production, or delivery of the scripts be liable for any damages whatsoever
-- (including, without limitation, damages for loss of business profits, business
-- interruption, loss of business information, or other pecuniary loss) arising
-- out of the use of or inability to use the scripts or documentation.

USE SUSDB;

SELECT
    cs.DefaultTitle AS Category,
    parent_cs.DefaultTitle AS ParentCategory,
    cs.CategoryType,
    COUNT(ct.UpdateID) AS UpdateCount
INTO #CategoryData
FROM [SUSDB].[dbo].[tbUpdate] AS cr
JOIN [SUSDB].[dbo].[vwUpdateInCategory] AS ct ON cr.UpdateID = ct.UpdateID
JOIN [SUSDB].[PUBLIC_VIEWS].[vCategory] AS cs ON ct.CategoryUpdateID = cs.CategoryID
LEFT JOIN [SUSDB].[PUBLIC_VIEWS].[vCategory] AS parent_cs ON cs.ParentCategoryID = parent_cs.CategoryID
WHERE cr.IsLocallyPublished = 1
    AND ct.CategoryUpdateID IS NOT NULL
GROUP BY cs.DefaultTitle, parent_cs.DefaultTitle, cs.CategoryType;

-- Summary: TotalCategories must be below 100
SELECT
    'TotalCategories' AS Name,
    SUM(TotalCategories) AS Total
FROM (
    SELECT
        ParentCategory AS Category,
        SUM(UpdateCount) AS UpdateCount,
        (SELECT COUNT(*) FROM #CategoryData AS sub
         WHERE sub.ParentCategory = main.ParentCategory
         AND sub.CategoryType = 'Product') + 1 AS TotalCategories
    FROM #CategoryData AS main
    WHERE CategoryType = 'Product'
    GROUP BY ParentCategory
) AS CompanyCategories;

DROP TABLE #CategoryData;

Note: If you are connecting to a Windows Internal Database (WID), use the named pipe \\.\pipe\MICROSOFT##WID\tsql\query as the server name in SSMS with Windows Authentication.


Step 2 — Expire or Delete Old Packages in SPM (if TotalCategories is at or near 100)

  1. In Patch Manager, go to Enterprise → Software Publishing

  2. Identify and Expire (or Delete) old locally published packages for vendors and products that are no longer required

  3. Focus on vendors with many distinct product names first — removing one vendor entry frees N+1 category slots (one per product plus the vendor/company entry itself)


Step 3 — Run the WSUS Server Cleanup Wizard AFTER Expiring Packages

Important: The WSUS Server Cleanup Wizard only frees category slots for packages that have already been expired or declined. Running it before Step 2 has no effect on locally published categories.

  1. In Patch Manager, go to Enterprise → Update Services

  2. Select your WSUS server

  3. In the Actions pane, click Server Cleanup Wizard

  4. Complete the wizard

For additional WSUS database maintenance (especially if orphaned categories are suspected), also refer to Microsoft's WSUS automatic maintenance guidance: WSUS Automatic Maintenance — Microsoft Learn


Step 4 — Verify the Count and Retry Publishing

Re-run the SQL query from Step 1 and confirm that TotalCategories is now below 100. Once confirmed, retry the publish operation in SPM.