利用IIS7自帶類庫管理IIS如今變的更強大更方便,而徹底能夠不須要用DirecotryEntry這個類了(網上不少.net管理iis6.0的文章都用到了DirecotryEntry這個類 ),Microsoft.Web.Administration.dll位於IIS的目錄(%WinDir%\\System32\\InetSrv)下,使用時須要引用,它基本上能夠管理IIS7的各項配置。html
這個類庫的主體結構以下:web
主要調用code 以下:api
using (ServerManager sm = ServerManager.OpenRemote("192.168.0.129")) { //建立站點 sm.Sites.Add("test", @"D:\DataBackup", 9898); //建立應用程序池 sm.ApplicationPools.Add("test"); //設置站點的應用程序池 sm.Sites["test"].Applications[0].ApplicationPoolName = "test"; sm.CommitChanges(); }
void CreateIISSite(string serverIP, string webName, int port, string path) { try { using (ServerManager sm = ServerManager.OpenRemote(serverIP)) { //建立應用程序池 ApplicationPool appPool = sm.ApplicationPools.FirstOrDefault(x => x.Name == webName); if (appPool == null) { appPool = sm.ApplicationPools.Add(webName); appPool.AutoStart = false; appPool.QueueLength = 10000; appPool.StartMode = StartMode.AlwaysRunning;//啓動模式 appPool.Recycling.PeriodicRestart.Time = new TimeSpan();//回收時間間隔 appPool.ProcessModel.IdleTimeout = new TimeSpan();//閒置超時 appPool.ProcessModel.MaxProcesses = 1;//最大工做進程數 } //建立Site Site site = sm.Sites.FirstOrDefault(x => x.Name == webName); if (site == null) { site = sm.Sites.Add(webName, path, port); site.ServerAutoStart = true; site.Bindings[0].EndPoint.Port = port; Application root = site.Applications["/"]; root.ApplicationPoolName = webName; root.VirtualDirectories["/"].PhysicalPath = path; root.SetAttributeValue("preloadEnabled", true); /*預加載*/ } sm.CommitChanges(); } } catch (Exception ex) { ExceptionUtil.Throw(ex); } }
檢查 計算機 是否安裝有IIS var service = ServiceController.GetServices(serverIp).FirstOrDefault(x => x.ServiceName == "W3SVC");併發
有關IIS預加載 你們能夠參考:預加載會執行Application_Start方法。app
IIS初始化(預加載),解決第一次訪問慢,程序池被回收問題
IIS預編譯提高加載速度ide
後來在網上發下一個查詢屬性的code 不錯,先copy過來網站
Microsoft.Web.Administration.ServerManager sm = new Microsoft.Web.Administration.ServerManager(); System.Console.WriteLine("應用程序池默認設置:"); System.Console.WriteLine("\t常規:"); System.Console.WriteLine("\t\t.NET Framework 版本:{0}", sm.ApplicationPoolDefaults.ManagedRuntimeVersion); System.Console.WriteLine("\t\t隊列長度:{0}", sm.ApplicationPoolDefaults.QueueLength); System.Console.WriteLine("\t\t託管管道模式:{0}", sm.ApplicationPoolDefaults.ManagedPipelineMode.ToString()); System.Console.WriteLine("\t\t自動啓動:{0}", sm.ApplicationPoolDefaults.AutoStart); System.Console.WriteLine("\tCPU:"); System.Console.WriteLine("\t\t處理器關聯掩碼:{0}", sm.ApplicationPoolDefaults.Cpu.SmpProcessorAffinityMask); System.Console.WriteLine("\t\t限制:{0}", sm.ApplicationPoolDefaults.Cpu.Limit); System.Console.WriteLine("\t\t限制操做:{0}", sm.ApplicationPoolDefaults.Cpu.Action.ToString()); System.Console.WriteLine("\t\t限制間隔(分鐘):{0}", sm.ApplicationPoolDefaults.Cpu.ResetInterval.TotalMinutes); System.Console.WriteLine("\t\t已啓用處理器關聯:{0}", sm.ApplicationPoolDefaults.Cpu.SmpAffinitized); System.Console.WriteLine("\t回收:"); System.Console.WriteLine("\t\t發生配置更改時禁止回收:{0}", sm.ApplicationPoolDefaults.Recycling.DisallowRotationOnConfigChange); System.Console.WriteLine("\t\t固定時間間隔(分鐘):{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Time.TotalMinutes); System.Console.WriteLine("\t\t禁用重疊回收:{0}", sm.ApplicationPoolDefaults.Recycling.DisallowOverlappingRotation); System.Console.WriteLine("\t\t請求限制:{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Requests); System.Console.WriteLine("\t\t虛擬內存限制(KB):{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Memory); System.Console.WriteLine("\t\t專用內存限制(KB):{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.PrivateMemory); System.Console.WriteLine("\t\t特定時間:{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Schedule.ToString()); System.Console.WriteLine("\t\t生成回收事件日誌條目:{0}", sm.ApplicationPoolDefaults.Recycling.LogEventOnRecycle.ToString()); System.Console.WriteLine("\t進程孤立:"); System.Console.WriteLine("\t\t可執行文件:{0}", sm.ApplicationPoolDefaults.Failure.OrphanActionExe); System.Console.WriteLine("\t\t可執行文件參數:{0}", sm.ApplicationPoolDefaults.Failure.OrphanActionParams); System.Console.WriteLine("\t\t已啓用:{0}", sm.ApplicationPoolDefaults.Failure.OrphanWorkerProcess); System.Console.WriteLine("\t進程模型:"); System.Console.WriteLine("\t\tPing 間隔(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.PingInterval.TotalSeconds); System.Console.WriteLine("\t\tPing 最大響應時間(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.PingResponseTime.TotalSeconds); System.Console.WriteLine("\t\t標識:{0}", sm.ApplicationPoolDefaults.ProcessModel.IdentityType); System.Console.WriteLine("\t\t用戶名:{0}", sm.ApplicationPoolDefaults.ProcessModel.UserName); System.Console.WriteLine("\t\t密碼:{0}", sm.ApplicationPoolDefaults.ProcessModel.Password); System.Console.WriteLine("\t\t關閉時間限制(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.ShutdownTimeLimit.TotalSeconds); System.Console.WriteLine("\t\t加載用戶配置文件:{0}", sm.ApplicationPoolDefaults.ProcessModel.LoadUserProfile); System.Console.WriteLine("\t\t啓動時間限制(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.StartupTimeLimit.TotalSeconds); System.Console.WriteLine("\t\t容許 Ping:{0}", sm.ApplicationPoolDefaults.ProcessModel.PingingEnabled); System.Console.WriteLine("\t\t閒置超時(分鐘):{0}", sm.ApplicationPoolDefaults.ProcessModel.IdleTimeout.TotalMinutes); System.Console.WriteLine("\t\t最大工做進程數:{0}", sm.ApplicationPoolDefaults.ProcessModel.MaxProcesses); System.Console.WriteLine("\t快速故障防禦:"); System.Console.WriteLine("\t\t「服務不可用」響應類型:{0}", sm.ApplicationPoolDefaults.Failure.LoadBalancerCapabilities.ToString()); System.Console.WriteLine("\t\t故障間隔(分鐘):{0}", sm.ApplicationPoolDefaults.Failure.RapidFailProtectionInterval.TotalMinutes); System.Console.WriteLine("\t\t關閉可執行文件:{0}", sm.ApplicationPoolDefaults.Failure.AutoShutdownExe); System.Console.WriteLine("\t\t關閉可執行文件參數:{0}", sm.ApplicationPoolDefaults.Failure.AutoShutdownParams); System.Console.WriteLine("\t\t已啓用:{0}", sm.ApplicationPoolDefaults.Failure.RapidFailProtection); System.Console.WriteLine("\t\t最大故障數:{0}", sm.ApplicationPoolDefaults.Failure.RapidFailProtectionMaxCrashes); System.Console.WriteLine("\t\t容許32位應用程序運行在64位 Windows 上:{0}", sm.ApplicationPoolDefaults.Enable32BitAppOnWin64); System.Console.WriteLine(); System.Console.WriteLine("網站默認設置:"); System.Console.WriteLine("\t常規:"); System.Console.WriteLine("\t\t物理路徑憑據:UserName={0}, Password={1}", sm.VirtualDirectoryDefaults.UserName, sm.VirtualDirectoryDefaults.Password); System.Console.WriteLine("\t\t物理路徑憑據登陸類型:{0}", sm.VirtualDirectoryDefaults.LogonMethod.ToString()); System.Console.WriteLine("\t\t應用程序池:{0}", sm.ApplicationDefaults.ApplicationPoolName); System.Console.WriteLine("\t\t自動啓動:{0}", sm.SiteDefaults.ServerAutoStart); System.Console.WriteLine("\t行爲:"); System.Console.WriteLine("\t\t鏈接限制:"); System.Console.WriteLine("\t\t\t鏈接超時(秒):{0}", sm.SiteDefaults.Limits.ConnectionTimeout.TotalSeconds); System.Console.WriteLine("\t\t\t最大併發鏈接數:{0}", sm.SiteDefaults.Limits.MaxConnections); System.Console.WriteLine("\t\t\t最大帶寬(字節/秒):{0}", sm.SiteDefaults.Limits.MaxBandwidth); System.Console.WriteLine("\t\t失敗請求跟蹤:"); System.Console.WriteLine("\t\t\t跟蹤文件的最大數量:{0}", sm.SiteDefaults.TraceFailedRequestsLogging.MaxLogFiles); System.Console.WriteLine("\t\t\t目錄:{0}", sm.SiteDefaults.TraceFailedRequestsLogging.Directory); System.Console.WriteLine("\t\t\t已啓用:{0}", sm.SiteDefaults.TraceFailedRequestsLogging.Enabled); System.Console.WriteLine("\t\t已啓用的協議:{0}", sm.ApplicationDefaults.EnabledProtocols); foreach (var s in sm.Sites)//遍歷網站 { System.Console.WriteLine(); System.Console.WriteLine("模式名:{0}", s.Schema.Name); System.Console.WriteLine("編號:{0}", s.Id); System.Console.WriteLine("網站名稱:{0}", s.Name); System.Console.WriteLine("物理路徑:{0}", s.Applications["/"].VirtualDirectories["/"].PhysicalPath); System.Console.WriteLine("物理路徑憑據:{0}", s.Methods.ToString()); System.Console.WriteLine("應用程序池:{0}", s.Applications["/"].ApplicationPoolName); System.Console.WriteLine("已啓用的協議:{0}", s.Applications["/"].EnabledProtocols); System.Console.WriteLine("自動啓動:{0}", s.ServerAutoStart); System.Console.WriteLine("運行狀態:{0}", s.State.ToString()); System.Console.WriteLine("網站綁定:"); foreach (var tmp in s.Bindings) { System.Console.WriteLine("\t類型:{0}", tmp.Protocol); System.Console.WriteLine("\tIP 地址:{0}", tmp.EndPoint.Address.ToString()); System.Console.WriteLine("\t端口:{0}", tmp.EndPoint.Port.ToString()); System.Console.WriteLine("\t主機名:{0}", tmp.Host); //System.Console.WriteLine(tmp.BindingInformation); //System.Console.WriteLine(tmp.CertificateStoreName); //System.Console.WriteLine(tmp.IsIPPortHostBinding); //System.Console.WriteLine(tmp.IsLocallyStored); //System.Console.WriteLine(tmp.UseDsMapper); } System.Console.WriteLine("鏈接限制:"); System.Console.WriteLine("\t鏈接超時(秒):{0}", s.Limits.ConnectionTimeout.TotalSeconds); System.Console.WriteLine("\t最大併發鏈接數:{0}", s.Limits.MaxConnections); System.Console.WriteLine("\t最大帶寬(字節/秒):{0}", s.Limits.MaxBandwidth); System.Console.WriteLine("失敗請求跟蹤:"); System.Console.WriteLine("\t跟蹤文件的最大數量:{0}", s.TraceFailedRequestsLogging.MaxLogFiles); System.Console.WriteLine("\t目錄:{0}", s.TraceFailedRequestsLogging.Directory); System.Console.WriteLine("\t已啓用:{0}", s.TraceFailedRequestsLogging.Enabled); System.Console.WriteLine("日誌:"); //System.Console.WriteLine("\t啓用日誌服務:{0}", s.LogFile.Enabled); System.Console.WriteLine("\t格式:{0}", s.LogFile.LogFormat.ToString()); System.Console.WriteLine("\t目錄:{0}", s.LogFile.Directory); System.Console.WriteLine("\t文件包含字段:{0}", s.LogFile.LogExtFileFlags.ToString()); System.Console.WriteLine("\t計劃:{0}", s.LogFile.Period.ToString()); System.Console.WriteLine("\t最大文件大小(字節):{0}", s.LogFile.TruncateSize); System.Console.WriteLine("\t使用本地時間進行文件命名和滾動更新:{0}", s.LogFile.LocalTimeRollover); System.Console.WriteLine("----應用程序的默認應用程序池:{0}", s.ApplicationDefaults.ApplicationPoolName); System.Console.WriteLine("----應用程序的默認已啓用的協議:{0}", s.ApplicationDefaults.EnabledProtocols); //System.Console.WriteLine("----應用程序的默認物理路徑憑據:{0}", s.ApplicationDefaults.Methods.ToString()); //System.Console.WriteLine("----虛擬目錄的默認物理路徑憑據:{0}", s.VirtualDirectoryDefaults.Methods.ToString()); System.Console.WriteLine("----虛擬目錄的默認物理路徑憑據登陸類型:{0}", s.VirtualDirectoryDefaults.LogonMethod.ToString()); System.Console.WriteLine("----虛擬目錄的默認用戶名:{0}", s.VirtualDirectoryDefaults.UserName); System.Console.WriteLine("----虛擬目錄的默認用戶密碼:{0}", s.VirtualDirectoryDefaults.Password); System.Console.WriteLine("應用程序 列表:"); foreach (var tmp in s.Applications) { if (tmp.Path != "/") { System.Console.WriteLine("\t模式名:{0}", tmp.Schema.Name); System.Console.WriteLine("\t虛擬路徑:{0}", tmp.Path); System.Console.WriteLine("\t物理路徑:{0}", tmp.VirtualDirectories["/"].PhysicalPath); //System.Console.WriteLine("\t物理路徑憑據:{0}", tmp.Methods.ToString()); System.Console.WriteLine("\t應用程序池:{0}", tmp.ApplicationPoolName); System.Console.WriteLine("\t已啓用的協議:{0}", tmp.EnabledProtocols); } System.Console.WriteLine("\t虛擬目錄 列表:"); foreach (var tmp2 in tmp.VirtualDirectories) { if (tmp2.Path != "/") { System.Console.WriteLine("\t\t模式名:{0}", tmp2.Schema.Name); System.Console.WriteLine("\t\t虛擬路徑:{0}", tmp2.Path); System.Console.WriteLine("\t\t物理路徑:{0}", tmp2.PhysicalPath); //System.Console.WriteLine("\t\t物理路徑憑據:{0}", tmp2.Methods.ToString()); System.Console.WriteLine("\t\t物理路徑憑據登陸類型:{0}", tmp2.LogonMethod.ToString()); } } } }