如何使用C#获取特定网站IIS 6程序的应用程序池名称
编辑:我已经使用了DirectoryServices命名空间的方法,但是除非使用相同的代码显式设置,否则无法正确检索应用程序池名称.这意味着如果您使用iis管理器手动添加网站并设置应用程序池,那么当我使用sharepoint创建应用程序并设置不同的appPool这些方法不起作用时,这些代码将无法工作(它将始终返回DefaultAppPool).
我不同意你的看法.我编写了一个测试应用程序,我从中获得了正确的AppPool名称,即使我使用IIS管理器手动设置AppPool.
为了确保,我已经测试了一次,名字名称还可以; 然后,我找到了IIS管理器,更改了AppPool,执行了iisreset
,再次运行了测试应用程序 - 我得到的AppPool名称再次正确.我不知道你的代码是怎样的,但我的代码是这样的:
using System; using System.IO; using System.DirectoryServices; class Class { static void Main(string[] args) { DirectoryEntry entry = FindVirtualDirectory("", "Default Web Site", " "); if (entry != null) { Console.WriteLine(entry.Properties["AppPoolId"].Value); } } static DirectoryEntry FindVirtualDirectory(string server, string website, string virtualdir) { DirectoryEntry siteEntry = null; DirectoryEntry rootEntry = null; try { siteEntry = FindWebSite(server, website); if (siteEntry == null) { return null; } rootEntry = siteEntry.Children.Find("ROOT", "IIsWebVirtualDir"); if (rootEntry == null) { return null; } return rootEntry.Children.Find(virtualdir, "IIsWebVirtualDir"); } catch (DirectoryNotFoundException ex) { return null; } finally { if (siteEntry != null) siteEntry.Dispose(); if (rootEntry != null) rootEntry.Dispose(); } } static DirectoryEntry FindWebSite(string server, string friendlyName) { string path = String.Format("IIS://{0}/W3SVC", server); using (DirectoryEntry w3svc = new DirectoryEntry(path)) { foreach (DirectoryEntry entry in w3svc.Children) { if (entry.SchemaClassName == "IIsWebServer" && entry.Properties["ServerComment"].Value.Equals(friendlyName)) { return entry; } } } return null; } }
抱歉我糟糕的英语.
希望我帮了.