C# 在c中获取应用程序池正常运行时间#

C# 在c中获取应用程序池正常运行时间#,c#,iis-7,application-pool,C#,Iis 7,Application Pool,是否有一种方法可以确定应用程序池(在IIS7中)在c#中运行了多长时间(自启动或上次重新启动后的时间)?从ASP.NET应用程序中,您可以尝试TimeSpan正常运行时间=(DateTime.Now-ProcessInfo.GetCurrentProcessInfo().StartTime)如果将,你应该明白这是一个非常愚蠢的把戏:在所有东西都使用的某个类中,使用类构造函数来记住你的开始时间,并使用aspx页面来接收它。现在与当前时间进行比较 DateTime.Now - Process.Get

是否有一种方法可以确定应用程序池(在IIS7中)在c#中运行了多长时间(自启动或上次重新启动后的时间)?

从ASP.NET应用程序中,您可以尝试
TimeSpan正常运行时间=(DateTime.Now-ProcessInfo.GetCurrentProcessInfo().StartTime)
如果将,你应该明白这是一个非常愚蠢的把戏:在所有东西都使用的某个类中,使用类构造函数来记住你的开始时间,并使用aspx页面来接收它。现在与当前时间进行比较

DateTime.Now - Process.GetCurrentProcess().StartTime

Process.GetCurrentProcessInfo()
不存在。

如果您发现该进程.GetCurrentProcessInfo()不存在,如其他用户所述

System.Diagnostics.Process.GetCurrentProcess().StartTime
我可以为你工作


(我想在Eric Humphrey的帖子中添加此评论,但我不被允许)

基于上述内容,我创建了一个简单的类,如下所示

public static class UptimeMonitor
{
    static DateTime StartTime { get; set; }

    static UptimeMonitor()
    {
        StartTime = DateTime.Now;
    }

    public static int UpTimeSeconds
    {
        get { return (int)Math.Round((DateTime.Now - StartTime).TotalSeconds,0); }
    }
}
并在Global.asax.cs中的应用程序_Start()中调用它,如

var temp = UptimeMonitor.UpTimeSeconds;
然后可以使用

UptimeMonitor.UpTimeSeconds

我个人使用的方法有两种。使用静态类(如@Original10的答案所示)或使用
Application
变量

我发现使用
Application
变量是可以接受的,因为我注意到
Process.GetCurrentProcess()
在应用程序重新启动后仍然有效(例如修改web.config或bin目录)。我需要的东西,将迎合网站重新启动以及

在Global.asax中,将以下内容添加到

public void Application_Start(Object sender, EventArgs e)
{
  ...
  Application["ApplicationStartTime"] = DateTime.Now.ToString("o");
}
在需要的代码中,可以执行以下操作:

var appStartTime = DateTime.MinValue;
var appStartTimeValue = Web.HttpCurrent.Application["ApplicationStartTime"].ToString();

DateTime.TryParseExact(appStartTimeValue, "o", null, Globalization.DateTimeStyles.None, Out appStartTime);
var uptime = (DateTime.Now - appStartTime).TotalSeconds

var lsOutput = $"Application has been running since {appStartTime:o} - {uptime:n0} seconds."
这将产生一些类似于

Application has been running since 2018-02-16T10:00:56.4370974+00:00 - 10,166 seconds.

如果需要,不检查应用程序变量或锁定应用程序。我将把这作为练习留给用户。

外部,或在ASP.NET应用程序?外部。我一直在玩Microsoft.Web.Administration.ApplicationPool,但到目前为止我什么都看不到。你说的类构造函数是指
static
constructor吗?因为静态构造函数是你想要用它来做的,所以我以前从来没有考虑过使用静态构造函数来实现类似的功能有多容易。是的,IL中的类构造函数=C#中的静态构造函数。AppDomain可以被回收(更改web.config),而不需要回收应用程序池(w3wp.exe进程)。此静态构造函数将仅测量最近的appdomain重新启动。如果您确实需要应用程序池进程开始时间,请使用process info answers(@EricHumphrey)。是的,但我在问这个问题时发现,AppDomain几乎总是您想要的。有趣的是,它在应用程序重新启动后仍然存在,因此我不确定这是否准确。这会获取w3wp进程(IIS服务)的开始时间而不是应用程序池。