【问题标题】:Getting IIS workerprocess from ApplicationHost.config从 ApplicationHost.config 获取 IIS 工作进程
【发布时间】:2020-03-09 09:03:03
【问题描述】:

我需要在不使用 appcmd 或 ServerManager 的情况下获取 IIS 工作进程。 如果我使用 PerformanceCounter,我只能获得进程 ID 而不是 App 池名称。 我检查了 ServerManager 背后的代码,它似乎正在加载表单 applicationHost.Config 但我在其中找不到 WorkerProcess 部分。 我可以从 applicationhost 获取应用程序池列表,但我也需要 processId。 是否有任何 Windows API 可以将应用程序池和进程 ID 一起获取?

【问题讨论】:

  • ApplicationHost.config 仅包含静态设置。工作进程是动态的,完全由 WAS 管理,因此如果不使用 appcmd 或 ServerManager,就无法获取工作进程。

标签: iis application-pool worker-process


【解决方案1】:

获取工作流程信息和获取应用程序池配置将依赖于不同的东西。正如 lex 所说,IIS 不会在 applicationhost.config 中存储活动工作进程信息。

如果你想阅读一些应用程序池的配置,推荐使用Microsoft.Web.administration

如果您需要同时获取应用程序池和 PID,那么在管理员中使用命令行“APPCMD LIST WPS”将是最简单的方法,即使您不愿意同时使用 Appcmd 和服务器管理器。

如果 Appcmd 和服务器管理器根本不可接受,您可以使用 Process.GetProcessesByName() 来获取工作进程集合。然后通过 WMI 获取他们的用户名来获取他们的应用程序池。由于工作进程的用户名是 IIS Apppool\ Apppool name

由于用户可能会更改应用程序池,因此将更改为本地托管帐户。不建议接受此解决方法。

【讨论】:

  • 实际上我想从 GoLang 获取 AppPoolName 和 ProcessId,这就是我不能使用 Microsoft.Web.Administration 的原因。使用 AppCmd 是我的最后一个选择,但我正在寻找能够获取这些信息的原生 api。
  • @alirezam 根据我的理解,golang 没有官方 API。但是你试过这个吗? github.com/tombuildsstuff/golang-iis看来达到你的要求了。
猜你喜欢
  • 2010-09-08
  • 2011-10-24
  • 2011-06-29
  • 2012-09-11
  • 2019-04-06
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多