调用PerformanceCounterCategory.Create()时抛出“System.ComponentModel.Win32Exception:Access is denied”

时间:2010-03-29 08:51:00

标签: .net performancecounter

在我的机器上调用下面的PerformanceCounterCategory.Create()会消除此异常:

System.ComponentModel.Win32Exception:访问被拒绝

事件查看器中报告的消息如下:

无法打开或访问SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Perflib密钥以安装计数器字符串。调用返回的Win32状态是数据部分中的第一个DWORD。

你知道它的问题是什么吗?

谢谢!

        if (!PerformanceCounterCategory.Exists("MyCategory"))
        {
            CounterCreationDataCollection counters = new CounterCreationDataCollection();

            CounterCreationData avgDurationBase = new CounterCreationData();
            avgDurationBase.CounterName = "average time per operation base";
            avgDurationBase.CounterHelp = "Average duration per operation execution base";
            avgDurationBase.CounterType = PerformanceCounterType.AverageBase;
            counters.Add(avgDurationBase);


            // create new category with the counters above
            PerformanceCounterCategory.Create("MyCategory",
                "Sample category for Codeproject", PerformanceCounterCategoryType.SingleInstance, counters);
        }

1 个答案:

答案 0 :(得分:1)

要创建性能计数器,您需要具有足够的权限。尝试在管理员帐户下运行此代码。

另一个重要的注意事项。以下是documentation

的引用
  

强烈建议新的   性能计数器类别   安装过程中创建的   应用程序,而不是在执行期间   申请。这允许时间   为操作系统刷新   其登记表现清单   柜台类别。如果列表有   没有刷新,尝试使用   该类别将失败。