如何解决此错误在Windows 7中添加新的性能类别

时间:2014-04-10 15:56:45

标签: c# performance permissions performancecounter

我正在尝试编写一些c#代码,如果它不存在则编写一个新的性能计数器类别,然后添加一个特定的计数器。当我从Visual Studio开发服务器运行此代码时,一切正常。当我将它部署到IIS并尝试它时,我得到权限错误。我正在运行Windows 7并使用IIS 7.5。

到目前为止我做了些什么,其中一些是出于绝望而做的:

  1. 创建了一个我将作为特定用户运行的新应用程序池
  2. 创建了一个新用户并将他添加到Process Monitor和Administrator组
  3. 将新用户设置为新应用程序池的标识
  4. 将我的网络服务指向该应用程序池。
  5. 进入regedit并让用户完全控制HKLM / System / CurrentControlSet(显然应该有一个权限文件夹,但我没有在任何地方看到它。)
  6. 我知道这些步骤部分有效,因为我现在能够检查某个类别是否存在(ASPNET用户甚至无法做到)。我可以检查一个类别是否存在,我只是不能添加一个新类别。

    我得到的错误是

    Cannot create or delete the Performance Category 'C:\Windows\TEMP\tmp1AA8.tmp' because access is denied.
    

    添加性能计数器类别的代码如下所示:

             if (!PerformanceCounterCategory.Exists("APIService"))
                {
                    CounterCreationDataCollection counters = new CounterCreationDataCollection();
    
                    CounterCreationData counter = new CounterCreationData();
                    counter.CounterName = "# of operations executed";
                    counter.CounterHelp = "Operations executed";
                    counter.CounterType = PerformanceCounterType.RateOfCountsPerSecond32;
    
                    counters.Add(counter);
                    PerformanceCounterCategory.Create("APIService", "Api Counter", PerformanceCounterCategoryType.SingleInstance, counters); // This code blows up
    
                }
    

    我搜索过高低,无法找到有同样问题的人。我甚至试过给每个人完全控制c:\ windows \ temp。知道我在这里可能缺少什么吗?

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案(或者更确切地说是别人做了,但我可以在今天早上找到该论坛的链接)。我没有将App Pool设置为以管理员身份运行,而是将其切换到本地系统用户。这似乎已经解决了所有问题,因为用户有足够的权限来编写性能指标和其他需要完成的工作。