题
是任何人都熟悉的方式来获取与进程ID相关联的应用程序池?我使用的Win32_Process查询W3WP服务。现在回到了PID我试图让与之相关的应用程序池。
解决方案
如果你只是使用命令行来弄明白特设你也可以这样做:
脚本已经放置在systemroot \ System32 Windows Server 2003上所以干脆去你的命令提示符,然后输入iisapp.vbs(该.vbs是可选的),你就会有所有的应用程序池的信息瞬间列表你一直想知道的。您可能需要键入CSCRIPT iisapp.vbs如果在CScript不是默认的WSH脚本宿主。
让我们看看输出的示例:
W3WP.exe PID: 1468 AppPoolId: AppPoolForSite1.com
W3WP.exe PID: 3056 AppPoolId: AppPoolForSite2.com
W3WP.exe PID: 1316 AppPoolId: AppPoolForSite3.com
从马的嘴直接,微软文档这。
其他提示
在Windows Server 2008中这种情况已经改变。
在systemroot \ System32 \ INETSRV找到Appcmd.exe的
使用
APPCMD列表WP
你所有的工作进程的列表和APPPOOL他们所服务。
如果你的Windows Server 2008上运行,而您只希望PID,喂到另一个脚本或命令,你可以使用这样的:
c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME
例如,创建,创建一个特定的应用程序池的存储器转储批处理脚本,使用:
c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME > "%temp%\pid.txt"
for /F %%a in (%temp%\pid.txt) do c:\debugger\adplus.exe -hang -o d:\dumps -p %%a
pause
我才发现,原来你也可以找到这个在IIS 7的UI选择Web服务器节点,打开“工作进程”。这将显示每个应用程序池的名称,其进程ID和利用详细信息。
ServerManager serverManager = new ServerManager();
ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
试试这个工作,它应该得到你所需要的。
您可以使用任务管理器来查看其下运行的过程(这一般是相同的应用程序池名称)和进程ID的用户名,但你必须打开任务管理器这些列,它还假定进程下运行的用户名相同的应用程序池的名称(这是默认的,据我所知,除非是使用SharePoint等)。点击 还要注意的是,在此页面中列出的所有方法可能只显示当前运行的进程,这意味着如果你的特定进程已经关闭了,由于空闲时间,你必须先使用该网站,以使这一进程在列表中,并在你的情况下,它意味着你应该首先访问的所有网站,以确保与他们相关的进程乳宁。
此应该这样做。
public string getAppPoolName(int pid)
{
ServerManager serverManager = new ServerManager();
ApplicationPoolCollection apc = serverManager.ApplicationPools;
foreach (var app in apc)
{
var workers = app.WorkerProcesses;
foreach (var w in workers)
{
if (w.ProcessId == pid)
{
return app.Name;
}
}
}
return string.Empty;
}
打开IIS管理器(运行> INETMGR),从左至右的网站导航树,并从选择根级别“功能视图面板”选择“工作进程”
点击“工作进程”来获得其当前运行的所有工作进程的详细信息。
从这个列表中,您将获得应用程序池名称,进程id
的PID和应用程序池给出它的名字:
$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId