Кто-нибудь знает, как получить пул приложений, связанный с идентификатором процесса? Я использую Win32_Process для запроса сервисов W3WP и возвращения PID теперь, я пытаюсь связать с ним пул приложений.
Пакет PID приложения IIS
Ответ 1
Если вы просто используете командную строку, чтобы разобраться в ad-hoc, вы также можете сделать это:
script уже размещен в systemroot\system32 на Windows Server 2003, поэтому просто перейдите в командную строку и введите iisapp.vbs(.vbs необязательно), и у вас будет мгновенный список всех приложений Информация о пуле, которую вы всегда хотели знать. Вам может потребоваться ввести cscript iisapp.vbs, если CScript не является вашим WSH script по умолчанию.
Посмотрим пример вывода:
W3WP.exe PID: 1468 AppPoolId: AppPoolForSite1.com
W3WP.exe PID: 3056 AppPoolId: AppPoolForSite2.com
W3WP.exe PID: 1316 AppPoolId: AppPoolForSite3.com
Прямо из уст лошади, документы Microsoft this.
Ответ 2
В Windows Server 2008 это изменилось.
в systemroot\system32\inetsrv вы найдете appcmd.exe
используя
appcmd list wp
вы получаете список всех рабочих процессов и какой apppool они обслуживают.
Ответ 3
Если вы работаете в Windows Server 2008, и вы ТОЛЬКО хотите, чтобы PID, для подачи на другую команду script или, вы можете использовать это:
c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME
Например, для создания пакета script, который создает дамп памяти определенного пула приложений, используйте это:
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
Ответ 4
Я только что обнаружил, что вы также можете найти это в пользовательском интерфейсе для IIS 7. Выберите веб-сервер node и откройте "Рабочие процессы". Это покажет имя каждого пула приложений вместе с его идентификатором процесса и информацией об использовании.
Ответ 5
ServerManager serverManager = new ServerManager();
ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
Попробуйте работать с этим, и он должен получить то, что вам нужно.
Ответ 6
Вы можете использовать диспетчер задач для просмотра имени пользователя, под которым выполняется процесс (который в целом совпадает с именем пула приложений) и идентификатором процесса, но вы должны включить эти столбцы в диспетчере задач, и это также предполагает, что имя пользователя, в котором работает процесс, совпадает с именем пула приложений (по умолчанию это известно, если только вы не используете Sharepoint и т.п.).
Также обратите внимание, что все методы, перечисленные на этой странице, могут отображать только те процессы, которые в настоящее время запущены, а это означает, что если ваш конкретный процесс отключился из-за простоев, вы должны сначала использовать сайт, чтобы привести процесс в список, и в вашем случае это означает, что вы должны сначала получить доступ ко всем сайтам, чтобы убедиться, что процесс, связанный с ними, запущен.
Ответ 7
Откройте диспетчер IIS ( "Выполнить" > "Inetmgr" ), выберите корневой уровень из дерева навигации левого сайта, а в "Панель задач" выберите "Рабочие процессы"
Нажмите "Рабочие процессы", чтобы получить подробную информацию обо всех рабочих процессах, которые в настоящее время выполняются
Из этого списка вы получите имя пула приложений, идентификатор процесса
Ответ 8
PID пула приложений и приложений с указанием его имени:
$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId
Ответ 9
Это должно сделать это.
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;
}