检查IIS应用程序是否正在运行而不会导致它运行

时间:2009-09-09 15:34:48

标签: c# iis-7 application-pool

我正在编写一个Web监视器应用程序,它提供有关IIS服务器上所有应用程序池/应用程序的信息。我在C#中寻找一种方法,以编程方式检查IIS应用程序是否正在运行而不会导致它运行,如果不是的话。

这是我发现的......

  1. 应用程序正在运行,有一个或多个会话处于活动状态。
  2. 所有会话都已关闭...应用程序仍在“正在运行”,应用程序池工作进程正在运行。
  3. 在IIS确定的某个时刻,Application_End最终被执行...但是,应用程序池工作进程仍在运行。
  4. 20分钟后,应用程序池工作进程最终因不活动而关闭。
  5. #3和#4之间我遇到了麻烦。应用程序已结束,但如果我尝试向应用程序发送Http请求,它将自动启动。我正在寻找一种方法来以编程方式确定应用程序是否已经结束(当工作进程仍然处于活动状态等待关闭时)而不重新启动应用程序。

    如果您不确定我在说什么,我可以尝试提供更多细节。

    此致 杰里米

3 个答案:

答案 0 :(得分:1)

我在MSDN上发现了这个

public bool CheckIISRunning()
  {
     ServiceController controller = new ServiceController("W3SVC");
     return controller.Status == ServiceControllerStatus.Running;
  }

为此,你需要有 添加了System.ServiceProcess作为参考。

答案 1 :(得分:0)

Microsoft已创建一个VBScript文件来标识IIS应用程序池(按进程ID)。如果您在谷歌上搜索“iisapp.vbs”,它应该指向正确的方向。

注意:我不是100%确定它可以与Windows Server 2008一起使用,但确实适用于2003.

答案 2 :(得分:0)

在IIS7中,您可以使用 appcmd apppool /?查看可用的可能性。