Подтвердить что ты не робот

Пакет PID приложения IIS

Кто-нибудь знает, как получить пул приложений, связанный с идентификатором процесса? Я использую Win32_Process для запроса сервисов W3WP и возвращения PID теперь, я пытаюсь связать с ним пул приложений.

4b9b3361

Ответ 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;
}