.net 增加性能计数器所需的权限

.net 增加性能计数器所需的权限,.net,performancecounter,.net,Performancecounter,我很难确定增加性能计数器所需的权限。在尝试调用计数器上的.Increment时,我只发生过一次InvalidOperationException/拒绝访问(我想)。这使我得到以下信息: 围绕移动ASP.NET进程的最大问题 将性能计数器更新到生产环境中的应用程序 环境是权限。默认情况下,为了增加 性能计数器,用户需要有管理员或电源 用户权限 从那以后,我将用户添加到超级用户组,并继续我的工作,没有任何问题。后来,我发现“超级用户”不再拥有Vista之外的任何权限,这让我回到了同一篇文章: 幸运

我很难确定增加性能计数器所需的权限。在尝试调用计数器上的.Increment时,我只发生过一次InvalidOperationException/拒绝访问(我想)。这使我得到以下信息:

围绕移动ASP.NET进程的最大问题 将性能计数器更新到生产环境中的应用程序 环境是权限。默认情况下,为了增加 性能计数器,用户需要有管理员或电源 用户权限

从那以后,我将用户添加到超级用户组,并继续我的工作,没有任何问题。后来,我发现“超级用户”不再拥有Vista之外的任何权限,这让我回到了同一篇文章:

幸运的是,考虑到这些备选方案,结果是 更新性能计数器所需的权限集要小得多 而不是以管理员或超级用户身份运行。在注册表项中 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib,设置 访问控制列表,以便必要的用户具有完全控制权。在里面 我们最初的例子是,ASPNET用户将被授予完全控制权, 但任何需要更新性能的人都可以访问 柜台

但即便如此,这似乎也不是真的,因为我现在已经返回并从power users组中删除了我的测试用户,并且我的应用程序仍然在毫无问题地增加计数器

此外,似乎如果要设置权限,它将位于HKLM\System\CurrentControlSet\services\下的单个计数器上


我完全承认,我的代码可能存在其他问题,导致了我最初的权限问题。但是,我需要将其部署到XP中,因此我必须确认上述信息是否只是过时的信息,还是完全不正确。我很快就能自己确认这一点,但如果有人能验证信息或向我指出具体的文档,那就太好了。

这里有两种类型的权限:

  • 修改性能计数器类别的权限

  • 通过.NET代码调用或修改性能计数器的权限

  • 对于第一个选项,您只需要修改注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib(=手动添加或将用户添加到性能日志用户等)的权限,以及正常用户拥有的其他一些功能(如访问HKLM\SYSTEM\CurrentControlSet\Services),如KB中所述

    第二个与代码访问安全(CAS)策略有关。CAS策略是一种机制,用于确定执行代码是否具有操作权限(通常在资源上,例如文件系统或性能计数器上),如果没有权限,则抛出SecurityExeption。由于某些原因(例如,.NET代码旁边还有本机Win32 API),CAS策略自.NET 4起生效

    如果您想了解CAS策略,这是一篇很好的文章:

    启用CAS后,可以创建有关计算机上运行的代码的策略,并设置它是否可以增加或设置计数器的原始值,或者它是否可以引发安全异常(performance counter的可能权限可在中找到)


    基本上,如果您有.NET 4,您可以忽略CAS策略(它已关闭),使用以前的版本,使用mscorcfg.msc检查程序的权限。

    对于具有应用程序池标识的站点,LocalSystem要向性能日志用户添加什么帐户?