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

问题描述:

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

这里是我发现......

  1. 应用程序正在运行,也有积极的一个或多个会话。
  2. 所有会话中断...应用程序仍在“运行”,应用程序池工作进程正在运行。
  3. 在由IIS确定的某个点上,Application_End终于被执行了......但是,应用程序池工作进程仍在运行。
  4. 20分钟后,应用程序池工作进程最终由于不活动而关闭。

在#3和#4之间我有麻烦。该应用程序已结束,但如果我尝试向应用程序发送Http请求,它将自动启动。我正在寻找一种编程方式来确定应用程序是否已结束(而工作进程仍处于活动状态,正在等待关闭)而无需重新启动应用程序。

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

问候, 杰里米

微软已经创建了一个VBScript文件来识别IIS应用程序池(通过进程ID)。如果你在谷歌搜索“iisapp.vbs”,它应该指向你正确的方向。

注:我不是100%肯定它会与Windows Server 2008的工作,但与2003年

在IIS7工作,你可以使用APPCMD程序池/?看看有什么可能。

+0

和IIS 6.0 ?? – Kiquenet 2011-02-16 12:23:19

我发现这个MSDN上

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

对于这个工作,你需要有 System.ServiceProcess加入作为参考。