【问题标题】:A call to 'PerformanceCounterCategory' Class members throws a Windows service exception对“PerformanceCounterCategory”类成员的调用引发 Windows 服务异常
【发布时间】:2016-08-07 18:37:55
【问题描述】:

当我尝试使用 System.Diagnostics.PerformanceCounterCategory 类时,就像在这个例子中:

if (PerformanceCounterCategory.Exists("Network Interface")) {
   // ...
}

带有 HRESULT -2147467259Win32Exception 出现在条件中,并带有以下消息:

服务无法启动,可能是因为它被禁用或 因为它没有与之关联的已启用设备。

我在 Windows 10 下,使用该类需要什么 Windows 服务?我想我已经启用了所有相关的性能计数器(和网络)Windows 服务。

注意:我需要所需 Winows 服务的标识符名称(以及服务的英文显示名称)。

【问题讨论】:

  • 您尝试执行此操作的帐户是否来自管理帐户(或 Performance Monitor Users 组的成员)?
  • @TriskalJM 首先感谢您的评论。我是隐藏的默认“管理员”用户帐户名下的管理员,然后我拥有所有必需的权限(管理/启动服务),无论如何我得到的错误与 Windows 服务有关,我认为以防万一作为一个用户权限问题(在我的帐户下不可能有的东西)它应该抛出一些与用户权限访问被拒绝或其他东西非常不同的东西。

标签: c# .net windows exception windows-services


【解决方案1】:

您的应用程序是否以 64 位运行?

我会查看 Performance Counter DLL Host 服务并确保它没有被禁用和/或正在运行。

服务名称:PerfHost

说明:

使远程用户和 64 位进程能够查询性能 由 32 位 DLL 提供的计数器。如果此服务停止,则仅 本地用户和 32 位进程将能够查询性能 由 32 位 DLL 提供的计数器。

【讨论】:

    【解决方案2】:

    正如this SO answer指出的那样,内部性能计数器可能存在一些错误。尝试启动它来重置系统:

    cd %systemroot%\system32
    lodctr /R
    

    另外,请查看this 了解原始详细信息。

    更新 (1)

    这也可能是一个命名问题:如果你做了一个

    lodctr /Q(或 C# 中的 PerformanceCounterCategory.GetCategories()

    您将获得计算机上所有可用性能计数器的列表。可能计数器未注册或以其他名称注册。

    您可以查看this 答案以获取其他有用的详细信息。

    希望对你有帮助:)

    【讨论】:

    • 感谢您的帮助,我成功重建了性能计数器,但仍然遇到相同的服务异常。
    • 如果您执行 lodctr /Q(或 PerformanceCounterCategory.GetCategories()),您将获得计算机上所有可用性能计数器的列表。你看到“网络接口”了吗?
    • 嗯,该列表没有指定这样的类别名称,但是是的,我启用了网络性能计数器,“[.NET CLR Networking] 性能计数器”和“[.NET CLR Networking 4.0. 0.0] 性能计数器”。在 Windows 8.1 中,当我使用 API 的 GetAvailableInterfaceNames 函数时,性能计数器从未出现过这个问题:github.com/ElektroStudios/ElektroKit/blob/master/Solution/v1.5/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多