IIS7 应用程序中的 WMI 自定义性能标记的权限问题



我在获取权限以允许我的应用程序(在 IIS7 应用程序池中运行)删除/添加性能计数器类别及其数据时遇到问题。 我有这样的代码:

if (!PerformanceCounterCategory.Exists(CategoryName))
{
    var counters = new CounterCreationDataCollection();
    var opsIn = new CounterCreationData
    {
        CounterName = "Test Counter",
        CounterHelp = "Test Counter Help",
        CounterType = PerformanceCounterType.RateOfCountsPerSecond32
    };
    counters.Add(opsIn);
    PerformanceCounterCategory.Create(CategoryName, "Service Layer Instrumentation",
                                      PerformanceCounterCategoryType.SingleInstance,
                                      counters);
}
目的是在尚未创建性能计数器的

系统上创建性能计数器,因此我不受静态安装程序行为的约束(我希望能够毫不费力地更改计数器)。 到目前为止,当这起作用时,它工作得很好。

当我以管理员身份在可执行文件中运行此代码时,没有问题。 但是,当我在 IIS 服务中运行它时,应用程序池没有执行类别更改的正确权限。 我知道一个事实,可以获得 WMI 权限才能正常工作,因为我之前在测试服务器的演示中做过一次......但那是几个月前的事了,我累了,那是最后一刻。 整个事情是模糊的。 现在我无法重现我的结果,因为我要回去尝试正式化安装过程以包含必要的安全更改。

谷歌只是勉强有帮助,我清楚地记得在事情起作用之前不得不从几个页面中大杂烩说明。 是否有人建议为 IIS 应用池启用性能计数器类别编辑的完整说明?

如果不想在单独的进程中运行性能计数器代码,则可以通过提升权限执行以下操作。

http://msdn.microsoft.com/en-us/library/bd20x32d(v=vs.71).aspx

上面的链接介绍了 ASP.NET 应用程序中的性能计数器,以及默认情况下 ASP.NET 如何无权创建自定义性能计数器,也无法读取性能计数器。 以下是文章的引述。

如果在 ASP.NET 应用程序中使用性能计数器组件,则 ASPNET 用户帐户的默认设置将限制对性能计数器的访问。默认情况下,ASPNET 用户帐户可以写入性能计数器,但不能从性能计数器读取,并且无法创建新类别。可以将模拟与 ASPNET 帐户一起使用,以允许创建新类别。模拟标识必须具有足够的权限才能创建类别。如果应用程序需要可在部署之前指定的性能计数器,则可以由部署项目创建这些计数器。有关详细信息,请参阅 ASP.NET Web 应用程序安全性。

您可以模拟 asp 作为单独的帐户运行,您也可以授予权限。 下面是 ASP.NET 模拟文章中的示例代码,当然您也可以加密此用户名和密码。 本文介绍了如何加密用户名和密码。

http://msdn.microsoft.com/en-us/library/aa719560(v=vs.71).aspx

应在 ASP.NET 外部创建性能计数器。创建性能计数器类别需要默认 AppPoolIdentity 帐户没有的权限。创建自定义性能计数器后,ASP.NET 帐户可以读取这些计数器。(不要以系统或管理帐户运行 ASP.NET,因为这样做会带来安全风险)

您可以在设置过程中创建计数器。

只能使用管理员权限更改性能计数器类别。

请参见: 性能计数器引发安全异常

MSDN 文档包括在安装过程中创建它们的另一个原因:

强烈建议使用新的性能计数器类别 在应用程序安装期间创建,而不是在 应用程序的执行。这为操作留出了时间 系统刷新其已注册的性能计数器列表 类别。如果列表尚未刷新,则尝试使用 类别将失败。

最新更新