b_l*_*itt 10 .net performancecounter
我很难确定增加性能计数器所需的权限.当我试图在计数器上调用.Increment时,我只有一次出现InvalidOperationException/Access Denied(我认为).这引出了以下信息:
http://support.microsoft.com/kb/555129
将性能计数器更新到生产环境的ASP.NET应用程序移动过程中遇到的最大问题是权限.默认情况下,为了增加性能计数器,用户需要具有管理员或高级用户权限.
从那里我将用户添加到高级用户组并继续前进,没有问题.这是一个不相关的问题,我后来发现"超级用户"不再拥有Vista以外的任何权限,让我回到同一篇文章:
幸运的是,考虑到这些替代方案,事实证明更新性能计数器所需的权限集比作为管理员或高级用户运行要小得多.在注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib中,设置访问控制列表,以便必要的用户具有完全控制权.在我们的原始示例中,ASPNET用户将被授予完全控制权,但是可以向需要更新性能计数器的任何人授予访问权限.
但即使这样也不是真的,因为我现在已经退回并从高级用户组中删除了我的测试用户,而我的应用程序仍然没有问题地递增计数器.
此外,似乎如果有权限设置,它将在HKLM\System\CurrentControlSet\services \下的单个计数器上.
我完全承认我的代码可能存在其他问题导致我的原始权限问题.但是,我需要将这一部分一直部署回XP,因此确认上述内容是否只是日期信息或完全不正确对我来说非常重要.我很快就会自己确认这一点,但如果有人能够验证信息或指向我具体的文档,那将会很好.
这里有两种类型的权限:
修改性能计数器类别的权限
通过.NET代码调用修改性能计数器的权限
对于第一个,您只需要修改注册表项 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib 的权限(=手动添加或将用户添加到性能日志用户等..)以及普通用户拥有的其他一些东西(例如访问 HKLM\SYSTEM\CurrentControlSet\Services),如知识库中所述。
第二个与代码访问安全(CAS)策略有关。CAS 策略过去/现在是一种机制,用于确定执行代码是否具有操作权限(通常针对资源,例如文件系统或性能计数器),如果没有,则抛出 SecurityExeption。由于各种原因, CAS 策略自 .NET 4 起就已过时(例如,除了 .NET 代码之外还有本机 Win32 API)。
如果您想了解 CAS 策略,这是一篇不错的文章:Understanding .NET Code Access Security
启用 CAS 后,可以创建有关计算机上运行的代码的策略,并设置它是否可以递增或设置计数器的原始值,或者是否可以抛出安全异常(性能计数器的可能权限)可在PerformanceCounterPermissionAccess中找到)。
基本上如果你有.NET 4,你可以忽略CAS策略(它已经被关闭),以前的版本使用mscorcfg.msc检查程序的权限。