Вопрос

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

Это было полезно?

Решение

Если вы просто используете командную строку, чтобы разобраться в этом ad-hoc, вы тоже можете это сделать:

Скрипт уже размещен в 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

Прямо из первых уст, документы Microsoft это.

Другие советы

В 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.Выберите свой узел веб-сервера и откройте "Рабочие процессы".При этом будет показано имя каждого пула приложений вместе с идентификатором процесса и сведениями об использовании.

ServerManager serverManager = new ServerManager();
ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;

Попробуйте поработать с этим, и это должно дать вам то, что вам нужно.

Вы можете использовать диспетчер задач для просмотра имени пользователя, под которым выполняется процесс (которое, как правило, совпадает с именем пула приложений), и идентификатора процесса, но вы должны включить эти столбцы в диспетчере задач, и он также предполагает, что имя пользователя, под которым выполняется процесс, совпадает с именем пула приложений (которое, насколько я знаю, используется по умолчанию, если только вы не используете 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 ), выберите корневой уровень в левом дереве навигации по сайту и на “Панели просмотра компонентов” выберите “Рабочие процессы”.

Нажмите на “Рабочие процессы”, чтобы получить подробную информацию обо всех рабочих процессах, которые выполняются в данный момент

Из этого списка вы получите имя пула приложений, идентификатор процесса

PID и пул приложений, дающий его имя:

$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top