У меня есть специальная категория счетчиков производительности. Visual Studio Server Explorer отказывается удалить его, заявив, что он "не зарегистрирован или системная категория". Если не сделать это программно, как я могу удалить категорию? Есть ли раздел реестра, который я могу удалить?
Удаление категорий счетчиков производительности Windows
Ответ 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
Ответ 2
Вы также можете использовать LinqPad, поскольку это не связано с установкой любого типа - http://www.linqpad.net/.
Запустите следующий код как "С# Statement (s)":
System.Diagnostics.PerformanceCounterCategory.Delete("Name of category to delete");
Я бы запустил его дважды, первый раз, чтобы сделать фактическое удаление, второй раз, чтобы получить сообщение об ошибке, чтобы подтвердить, что удаление было успешным.
Ответ 3
Я знаю этот вопрос, если старый, но я нашел способ сделать это не-программно: http://msdn.microsoft.com/en-us/library/windows/desktop/aa372130%28v=vs.85%29.aspx
Используйте unlodctr из командной строки, вам также может потребоваться использовать lodctr/q для запроса вашей категории.
Или сделайте это сложным путем, изменив раздел реестра (не удаляйте его): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009 http://msdn.microsoft.com/en-us/library/windows/desktop/aa373172%28v=vs.85%29.aspx
Ответ 4
Вы можете отключить его с помощью инструмента набора ресурсов Microsoft - установите его из
или отключить его из реестра вручную (не пробовал), описанный здесь
http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/94214.mspx?mfr=true