Ответ 1
Насколько я знаю, не является способом безопасно удалять их, кроме программно (они предназначены для приложений для создания и удаления во время установки), но это тривиально делать из PowerShell консоль командной строки. Просто запустите эту команду:
[Diagnostics.PerformanceCounterCategory]::Delete( "Your Category Name" )
ОДНАКО: (EDIT)
Вы можете удалить созданный раздел реестра, и это приведет к исчезновению категории.
Для категории под названием "Инвентарь" вы можете удалить весь ключ в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inventory
... и хотя я бы не стал делать ставку на то, что очищает все, делает категорию исчезают. (Если вы запускаете Process Monitor при запуске метода Delete(), вы можете видеть, что может произойти много других действий, и не возникает любые другие внесенные изменения).
Важно отметить, что , как я сказал первоначально: когда вы получите эту ошибку из Visual Studio, возможно, она уже удалена, и вам нужно обновить представление в VS. В моем тестировании мне пришлось перезапустить приложения, чтобы заставить их получить чистый список доступных категорий.
Вы можете просмотреть полный список категорий из PowerShell, чтобы узнать, указан ли он:
[Diagnostics.PerformanceCounterCategory]::GetCategories() | Format-Table -auto
Но если вы их проверите, удалите раздел реестра... они все равно появятся, пока вы не перезапустите PowerShell (если вы запустите другой экземпляр, вы можете запустить тот же запрос там, и он НЕ покажет удаленный элемент, но повторное использование GetCategories в первом продолжит показывать его.
Кстати, вы можете отфильтровать этот список, если хотите использовать-like для шаблонов, или -match для полных регулярных выражений:
[Diagnostics.PerformanceCounterCategory]::GetCategories() | Where {$_.CategoryName -like "*network*" } | Format-Table -auto
[Diagnostics.PerformanceCounterCategory]::GetCategories() | Where {$_.CategoryName -match "^SQL.*Stat.*" } | Format-Table -auto