Iis 识别给定应用程序池的w3wp System.Diagnostics.Process
我的服务器上运行的网站很少 我在应用程序中有一个“诊断”页面,显示当前进程的内存量(非常有用) 现在,此应用程序已“链接”到另一个应用程序,我希望我的诊断页面能够显示另一个w3wp进程的内存量 为了获得内存量,我使用了一个简单的代码:Iis 识别给定应用程序池的w3wp System.Diagnostics.Process,iis,application-pool,system.diagnostics,w3wp,Iis,Application Pool,System.diagnostics,W3wp,我的服务器上运行的网站很少 我在应用程序中有一个“诊断”页面,显示当前进程的内存量(非常有用) 现在,此应用程序已“链接”到另一个应用程序,我希望我的诊断页面能够显示另一个w3wp进程的内存量 为了获得内存量,我使用了一个简单的代码: var process = Process.GetProcessesByName("w3wp"); string memory = this.ToMemoryString(process.WorkingSet64); 知道第二个w3wp进程的应用程序池,如何识别
var process = Process.GetProcessesByName("w3wp");
string memory = this.ToMemoryString(process.WorkingSet64);
知道第二个w3wp进程的应用程序池,如何识别它
我找到了相应的线程,但没有找到合适的答案:
谢谢您可以使用它来标识给定的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);
}
}
您还可以使用IIS服务器管理器组件获取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;
}
就是这样!