我无法确定增加性能计数器所需的权限。当我试图在计数器上调用.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,因此确认上述内容是否只是日期信息或完全不正确对我来说非常重要。我很快就会自己确认这一点,但如果有人能够验证信息或指向我具体的文档,那就太好了。
答案 0 :(得分:0)
这里有两种类型的权限:
修改效果计数器类别的权限
调用权限通过.NET代码修改性能计数器
对于第一个,您只需要权限来修改注册表项HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Perflib(=手动添加或将用户添加到Performance Log Users等)和其他一些正常用户具有(例如访问HKLM \ SYSTEM \ CurrentControlSet \ Services),如KB中所述。
第二个与代码访问安全(CAS)策略有关。 CAS策略是一种机制,用于确定执行代码是否具有操作权限(通常在资源上,例如文件系统或性能计数器),如果它没有,则抛出SecurityExeption。由于obsolete原因(例如,除了.NET代码之外还有原生的Win32 API),CAS策略为various,因为.NET 4。(
)如果您想了解CAS政策,这是一篇不错的文章:Understanding .NET Code Access Security
启用CAS后,可以创建有关计算机上运行的代码的策略,并设置是否可以递增或设置计数器的原始值,或者是否可以引发安全性异常(可能的权限)性能计数器可在PerformanceCounterPermissionAccess)中找到。
基本上如果你有.NET 4,你可以忽略CAS策略(它已被关闭),以前的版本使用mscorcfg.msc检查程序的权限。