Удаление категорий счетчиков производительности Windows - PullRequest
24 голосов
/ 26 сентября 2008

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

Ответы [ 4 ]

41 голосов
/ 26 сентября 2008

Насколько я знаю, не может безопасно их удалить, кроме как программно (они предназначены для приложений, которые создаются и удаляются во время установки), но это просто сделать из Консоль командной строки PowerShell . Просто запустите эту команду:

[Diagnostics.PerformanceCounterCategory]::Delete( "Your Category Name" )

ОДНАКО: (РЕДАКТИРОВАТЬ)

Вы можете удалить созданный раздел реестра, что приведет к исчезновению категории.

Для категории «Инвентаризация» вы можете удалить весь ключ на 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
10 голосов
/ 19 июня 2009

Вы также можете использовать LinqPad, так как для этого не требуется установка - http://www.linqpad.net/.

Запустите следующий код как «оператор (ы) C #»:

System.Diagnostics.PerformanceCounterCategory.Delete("Name of category to delete");

Я бы запустил его дважды, первый раз для фактического удаления, второй раз, чтобы получить сообщение об ошибке, подтверждающее, что удаление прошло успешно.

2 голосов
/ 28 ноября 2013

Я знаю этот вопрос, если он старый, но я нашел способ сделать это непрограммически: http://msdn.microsoft.com/en-us/library/windows/desktop/aa372130%28v=vs.85%29.aspx

Используйте unlodctr из командной строки, вам также может понадобиться использовать lodctr / q для запроса вашей категории.

Или сделайте это нелегко, изменив ключ реестра (не удаляйте его): HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ Perflib \ 009 http://msdn.microsoft.com/en-us/library/windows/desktop/aa373172%28v=vs.85%29.aspx

0 голосов
/ 26 сентября 2008

Вы можете отключить его с помощью инструмента набора ресурсов Microsoft - установите его с

http://download.microsoft.com/download/win2000platform/exctrlst/1.00.0.1/nt5/en-us/exctrlst_setup.exe

или отключите его из реестра вручную (не пробовал), описанное здесь

http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/94214.mspx?mfr=true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...