【问题标题】:Deleting Windows performance counter categories删除 Windows 性能计数器类别
【发布时间】:2010-09-13 11:59:28
【问题描述】:

我有一个自定义性能计数器类别。 Visual Studio Server Explorer 拒绝删除它,声称它“未注册或系统类别”。如果没有以编程方式进行,我该如何删除该类别?有可以删除的注册表项吗?

【问题讨论】:

    标签: windows performancecounter


    【解决方案1】:

    据我所知,除了以编程方式之外,没有办法安全地删除它们(它们是供应用程序在安装过程中创建和删除的),但从 @987654321 中删除它们是微不足道的@ 命令行控制台。只需运行以下命令:

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

    但是:(编辑)

    可以删除已创建的注册表项,这将使类别消失。

    对于名为“库存”的类别,您可以删除 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inventory 处的整个键 ...虽然 我不愿意打赌它会清理所有内容,但它 使类别消失。 (如果您在运行 Delete() 方法的同时运行 Process Monitor,您可以看到许多其他活动正在发生,并且似乎没有进行任何其他更改)。

    重要的是要注意正如我最初所说的:当您从 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】:

      您可以使用 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

      【讨论】:

      • 我认为这会禁用特定服务的所有计数器......并且无助于摆脱“类别”
      【解决方案3】:

      您也可以使用 LinqPad,因为这不涉及任何类型的安装 - http://www.linqpad.net/

      将以下代码作为“C# 语句”运行:

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

      我会运行它两次,第一次执行实际删除,第二次收到错误消息以确认删除成功。

      【讨论】:

      • 当您使用的“系统管理员”懒得在他们自己的服务器上安装 PowerShell 时很有用...
      • 我发现我必须以管理员身份运行 LINQPad 才能正常工作,否则会出现“未授权”异常。
      【解决方案4】:

      我知道这个问题如果老了,但我找到了一种非编程方式来解决这个问题: 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 2017-07-21
        • 2023-03-14
        • 2011-03-18
        • 2011-12-31
        • 1970-01-01
        相关资源
        最近更新 更多