自定义性能计数器触发安全异常。为啥?

Posted

技术标签:

【中文标题】自定义性能计数器触发安全异常。为啥?【英文标题】:Custom Performance Counters triggers security exception. WHY?自定义性能计数器触发安全异常。为什么? 【发布时间】:2012-12-22 20:00:08 【问题描述】:

向我的应用程序添加自定义性能计数器后,我得到了图像中的异常。 我已经添加了提升的权限,我还应该尝试什么?我已经尝试了很长时间来解决这个问题,但没有结果......

谢谢你,请帮助...

    <Runtime executionContext="elevated" />

【问题讨论】:

【参考方案1】:

使用 Web 角色,即使您将 executionContext 设置为“提升”,角色进程仍然无法获得操作系统的完全执行权限。因此,当您在 Web 角色中使用自定义性能计数器时,操作系统不允许这种情况发生,您会看到异常。

您可以做的是设置自定义性能计数器以在 RoleEntoryPoint 内的 Role OnStart() 方法中以完全权限执行。如果您检查您的 WebRole.cs,您可能会发现 RoleEntryPoint 如下所示来编写您的自定义性能计数器特定代码:

// webrole.cs
public class WebRole : RoleEntryPoint

    public override bool OnStart()
    
        // Write here your customer performance counter code
        return base.OnStart();
    

【讨论】:

感谢 AvkashChauhan。我在 Global.Asax 的 Application_start 中创建了 performanceCounters(我没有 WebRole.cs 文件)。我需要什么代码才能让它以完全权限执行 - 或者 OnStart 方法是否比 global.asax 中的 Application_start 更有权限? 任何属于 ASP.NET 的代码都不会以完全权限运行,这就是为什么我建议在 Web 角色进程 (webrole.cs) 中运行计数器特定代码的原因。因此,如果您有 ASP.NET Web 角色,您肯定可以通过将 ASP.NET 应用程序转换为云应用程序来获得 Webrole.cs。另一种选择是为性能计数器特定代码编写一个简单的 C# EXE 并作为 Azure 启动任务运行。 正如你所说,你没有 webrole.cs,我只想知道你如何用 VS2x 打包 ASP.NET 应用程序?你没有使用 Azure SDK 吗?

以上是关于自定义性能计数器触发安全异常。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

通过 WMI 访问应用程序的自定义性能计数器

自定义时间段内的性能计数器

跨应用域回收使用自定义性能计数器

请求的性能计数器不是自定义计数器,它必须初始化为 ReadOnly

自定义 SQL Server 性能计数器

Zabbix 自定义监控Windows性能计数器的获取