Подтвердить что ты не робот

Удаление категорий счетчиков производительности Windows

У меня есть специальная категория счетчиков производительности. Visual Studio Server Explorer отказывается удалить его, заявив, что он "не зарегистрирован или системная категория". Если не сделать это программно, как я могу удалить категорию? Есть ли раздел реестра, который я могу удалить?

4b9b3361

Ответ 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