سؤال

هل أي شخص على دراية وسيلة للحصول على تجمع التطبيقات المرتبط بمعرف العملية؟ أنا أستخدم 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. حدد عقدة خادم الويب وفتح "عمليات عامل". سيؤدي ذلك إلى إظهار اسم كل مسبح للتطبيق مع معرف العملية وتفاصيل الاستخدام.

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