如何在IIS7中获取与应用程序池相关联的应用程序

4

我有一个虚拟目录名称。针对这个虚拟目录,我需要找到关联的应用程序池。一旦我获得了应用程序池,我就需要找出该应用程序池中的所有虚拟目录。 我正在使用以下代码查找与虚拟目录相关联的应用程序池:

string AppPoolName = string.Empty;
            ServerManager manager = new ServerManager();
            foreach (Site site in manager.Sites)
            {
                foreach (Application app in site.Applications)
                {
                    string path = app.Path;
                    path = path.Replace("/", " ");
                    path = path.Trim();

                    if (path.ToLower() == VDName.ToLower())
                    {
                        AppPoolName = app.ApplicationPoolName;
                        break;
                    }
                }
            }
3个回答

5
using (var serverManager = new ServerManager())
{
    var apps = (from site in serverManager.Sites
                from app in site.Applications
                where app.ApplicationPoolName.Equals("DefaultAppPool")
                select app);
}

2
欢迎来到 Stack Overflow!通常情况下,如果答案包含代码意图的解释以及为什么这样做可以解决问题而不会引入其他问题,那么它们会更有帮助。(此帖子被至少一个用户标记,可能是因为他们认为没有解释的答案应该被删除。) - Nathan Tuggy
1
可以使用 appcmd 吗? %windir%\system32\inetsrv\appcmd list apppool ... - Kiquenet
可以使用 appcmd 列出所有应用程序,@Kiquenet,但是你指引了我正确的方向,谢谢! - Eugenio Miró

2

我认为我们需要重新运行应用程序池的函数,以获取与应用程序关联的名称。

 ServerManager manager = new ServerManager();
        foreach (Site site in manager.Sites)
        {
            foreach (Application app in site.Applications)
            {

                if (app.ApplicationPoolName.ToString() == AppPoolName)
                {
                     string appname = app.Path;
                }
            }
        }

1

或者一种新的无需循环的方法:

 Environment.GetEnvironmentVariable("APP_POOL_ID", EnvironmentVariableTarget.Process);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接