1

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

这是我发现的...

  1. 应用程序正在运行,有一个或多个会话处于活动状态。
  2. 所有会话都停止了......应用程序仍在“运行”,应用程序池工作进程正在运行。
  3. 在 IIS 确定的某个时间点,Application_End 最终被执行......但是,应用程序池工作进程仍在运行。
  4. 20 分钟后,应用程序池工作进程最终因不活动而关闭。

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

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

问候,杰里米

4

3 回答 3

1

我在 MSDN 上找到了这个

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

为此,您需要添加 System.ServiceProcess 作为参考。

于 2011-03-18T09:38:40.090 回答
0

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

注意:我不能 100% 确定它是否适用于 Windows Server 2008,但适用于 2003。

于 2009-09-14T13:03:50.760 回答
0

在 IIS7 中,您可以使用appcmd apppool /? 看看有哪些可能性。

于 2009-09-14T13:14:19.727 回答