【问题标题】:Identify the w3wp System.Diagnostics.Process for a given application pool识别给定应用程序池的 w3wp System.Diagnostics.Process
【发布时间】:2011-01-10 18:28:30
【问题描述】:
【问题讨论】:
标签:
iis
application-pool
system.diagnostics
w3wp
【解决方案1】:
您可以使用WMI 来识别给定w3wp.exe 进程属于哪个应用程序池:
var scope = new ManagementScope(@"\\YOURSERVER\root\cimv2");
var query = new SelectQuery("SELECT * FROM Win32_Process where Name = 'w3wp.exe'");
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach (ManagementObject process in searcher.Get())
{
var commandLine = process["CommandLine"].ToString();
var pid = process["ProcessId"].ToString();
// This will print the command line which will look something like that:
// c:\windows\system32\inetsrv\w3wp.exe -a \\.\pipe\iisipm49f1522c-f73a-4375-9236-0d63fb4ecfce -t 20 -ap "NAME_OF_THE_APP_POOL"
Console.WriteLine("{0} - {1}", pid, commandLine);
}
}
【解决方案2】:
您还可以使用 IIS ServerManager 组件获取 PID;方式,如果您需要在代码中访问它,而无需重定向和解析控制台输出;
public static int GetIISProcessID(string appPoolName)
{
Microsoft.Web.Administration.ServerManager serverManager = new
Microsoft.Web.Administration.ServerManager();
foreach (WorkerProcess workerProcess in serverManager.WorkerProcesses)
{
if (workerProcess.AppPoolName.Equals(appPoolName))
return workerProcess.ProcessId;
}
return 0;
}