3

当我尝试从我的 ASP.NET 应用程序创建新的性能类别时出现错误。最初我遇到了一些与注册表相关的问题,但通过授予用户对某些注册表项的一些权限并将其添加到“性能日志用户”和“性能监视器用户”组中来解决这些问题。但现在我遇到了一个例外,我不知道还能尝试什么。

执行此行时发生错误:

PerformanceCounterCategory.Create(testName, testDescription, PerformanceCounterCategoryType.Unknown, counters);

testName并且testDescriptions是包含类别名称和描述的字符串变量,计数器是具有 3 个计数器的 CounterCreationDataCollection。

这是异常的堆栈跟踪:

在 System.Diagnostics.PerformanceCounterLib.RegisterFiles(String arg0, Boolean unregister) 在 System.Diagnostics.PerformanceCounterLib.RegisterCategory(String categoryName, PerformanceCounterCategoryType categoryType, String categoryHelp, CounterCreationDataCollection creationData) at System.Diagnostics.PerformanceCounterCategory.Create(String categoryName, String categoryHelp , PerformanceCounterCategoryType categoryType, CounterCreationDataCollection counterData) at CL.Libraries.PerformanceTestUtils.InitializeCounters(List`1 usedCounters, String testName, String testDescription) in C:\CL.Libraries\PerformanceTestUtils.cs:line 104

看来我无法发布图片,所以这就是我得到的:

" UnauthorizedAccessException 被捕获:

无法创建或删除性能类别“C:\TEMP\tmpD5E8.tmp”,因为访问被拒绝。"

类别键是在注册表中创建的。上面提到的文件被创建,然后被删除。我为用户提供了对 Temp 文件夹的显式访问权限,但这也无济于事。

任何帮助是极大的赞赏。

4

2 回答 2

4

您的代码在没有管理权限的情况下执行,并试图读取性能计数器。

您需要管理权限

上述消息取自 MSDN http://msdn.microsoft.com/en-us/library/sb32hxtc.aspx

于 2012-07-24T17:25:27.733 回答
1

HatSoft 是完全正确的,您需要管理员权限才能创建性能计数器——您通常只需执行一次即可创建计数器。创建这些后,您可以轻松地按名称实例化性能计数器,然后使用它。

我们通常(在开发应用程序之后)将过程的这一步放在安装过程中 - 一旦设置应用程序就可以随意使用计数器。

我在 GitHub 上有一个项目,显示了性能计数器的基本用法,它应该可以帮助您入门: https ://github.com/stemarie/Karell.PerfCounters 您需要以管理员身份运行 VS(右键单击,以管理员身份运行) 以使单元测试正常运行。

于 2012-09-26T16:27:49.147 回答