You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IIS10托管的ASP.NET站点后台获取站点/应用池运行时长?

获取IIS 10中ASP.NET站点对应应用池的运行时长

站点的运行时长确实等同于对应应用池的运行时长,以下是几种无需第三方工具、可在ASP.NET后台代码中直接调用的方法:

方法一:通过当前进程直接获取(最简单)

当前ASP.NET站点运行在对应的w3wp.exe进程中,该进程的启动时间就是应用池的启动时间,直接计算当前时间与进程启动时间的差值即可:

using System;
using System.Diagnostics;

public TimeSpan GetAppPoolUptime()
{
    var currentProcess = Process.GetCurrentProcess();
    return DateTime.Now - currentProcess.StartTime;
}

此方法无需额外引用程序集,也不需要特殊权限,适合大多数场景。

方法二:使用Microsoft.Web.Administration库

通过IIS管理库定位目标应用池,读取其工作进程的启动时间:

  1. 引用Microsoft.Web.Administration.dll(通常位于C:\Windows\System32\inetsrv目录)
  2. 编写代码:
using Microsoft.Web.Administration;
using System;

public TimeSpan GetAppPoolUptimeByServerManager()
{
    // 动态获取当前站点所属的应用池名称
    string currentAppPoolName = System.Web.Hosting.HostingEnvironment.ApplicationPoolName;

    using (var serverManager = new ServerManager())
    {
        var appPool = serverManager.ApplicationPools[currentAppPoolName];
        if (appPool != null && appPool.WorkerProcesses.Count > 0)
        {
            var workerProcess = appPool.WorkerProcesses[0];
            return DateTime.Now - workerProcess.StartTime;
        }
        return TimeSpan.Zero;
    }
}

注意:此方法需要应用池身份具备读取IIS配置的权限,若权限不足会抛出异常。

方法三:通过WMI查询

利用IIS暴露的WMI接口查询应用池信息:

  1. 引用System.Management程序集
  2. 编写代码:
using System;
using System.Management;

public TimeSpan GetAppPoolUptimeByWmi()
{
    string appPoolName = System.Web.Hosting.HostingEnvironment.ApplicationPoolName;
    TimeSpan uptime = TimeSpan.Zero;

    try
    {
        var scope = new ManagementScope(@"root\WebAdministration");
        scope.Connect();

        var query = new ObjectQuery($"SELECT * FROM ApplicationPool WHERE Name = '{appPoolName}'");
        using (var searcher = new ManagementObjectSearcher(scope, query))
        {
            foreach (ManagementObject obj in searcher.Get())
            {
                DateTime startTime = ManagementDateTimeConverter.ToDateTime(obj["StartTime"].ToString());
                uptime = DateTime.Now - startTime;
                break;
            }
        }
    }
    catch (Exception ex)
    {
        // 根据实际情况处理异常(如权限不足、WMI服务未启动等)
    }

    return uptime;
}

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:13:10