C#操作IIS程序池及站點的創建配置實現代碼
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
最近在做一個WEB程序的安裝包,對一些操作IIS進行一個簡單的總結,主要包括對IIS進行站點的新建以及新建站點的NET版本的選擇,還有針對IIS7程序池的托管模式以及版本的操作。 首先要對Microsoft.Web.Administration進行引用,它主要是用來操作IIS7: using System.DirectoryServices; 1:首先是對本版IIS的版本進行配置: 代碼如下: DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO"); string Version = getEntity.Properties["MajorIISVersionNumber"].Value.ToString(); MessageBox.Show("IIS版本為:" + Version); 2:是判斷程序池是存在; 代碼如下: /// <summary> /// 判斷程序池是否存在 /// </summary> /// <param name="AppPoolName">程序池名稱</param> /// <returns>true存在 false不存在</returns> private bool IsAppPoolName(string AppPoolName) { bool result = false; DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools"); foreach (DirectoryEntry getdir in appPools.Children) { if (getdir.Name.Equals(AppPoolName)) { result = true; } } return result; } 3:刪除應用程序池 代碼如下: /// <summary> /// 刪除指定程序池 /// </summary> /// <param name="AppPoolName">程序池名稱</param> /// <returns>true刪除成功 false刪除失敗</returns> private bool DeleteAppPool(string AppPoolName) { bool result = false; DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools"); foreach (DirectoryEntry getdir in appPools.Children) { if (getdir.Name.Equals(AppPoolName)) { try { getdir.DeleteTree(); result = true; } catch { result = false; } } } return result; } 4:創建應用程序池 (對程序池的設置主要是針對IIS7;IIS7應用程序池托管模式主要包括集成跟經典模式,并進行NET版本的設置) 代碼如下: string AppPoolName = "LamAppPool"; if (!IsAppPoolName(AppPoolName)) { DirectoryEntry newpool; DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools"); newpool = appPools.Children.Add(AppPoolName, "IIsApplicationPool"); newpool.CommitChanges(); MessageBox.Show(AppPoolName + "程序池增加成功"); } #endregion #region 修改應用程序的配置(包含托管模式及其NET運行版本) ServerManager sm = new ServerManager(); sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0"; sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated為集成 Classic為經典 sm.CommitChanges(); MessageBox.Show(AppPoolName + "程序池托管管道模式:" + sm.ApplicationPools[AppPoolName].ManagedPipelineMode.ToString() + "運行的NET版本為:" + sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion); 運用C#代碼來對IIS7程序池托管管道模式及版本進行修改。 5:針對IIS6的NET版進行設置,因為此處我是用到NET4.0所以V4.0.30319,若是NET2.0則在這進行修改 v2.0.50727 代碼如下: //啟動aspnet_regiis.exe程序 string fileName = Environment.GetEnvironmentVariable("windir") + @"\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe"; ProcessStartInfo startInfo = new ProcessStartInfo(fileName); //處理目錄路徑 string path = vdEntry.Path.ToUpper(); int index = path.IndexOf("W3SVC"); path = path.Remove(0, index); //啟動ASPnet_iis.exe程序,刷新腳本映射 startInfo.Arguments = "-s " + path; startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true; startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; Process process = new Process(); process.StartInfo = startInfo; process.Start(); process.WaitForExit(); string errors = process.StandardError.ReadToEnd(); 6:平常我們可能還得對IIS中的MIME類型進行增加,下面主要是我們用到兩個類型分別是:xaml,xap 代碼如下: IISOle.MimeMapClass NewMime = new IISOle.MimeMapClass(); NewMime.Extension = ".xaml"; NewMime.MimeType = "application/xaml+xml"; IISOle.MimeMapClass TwoMime = new IISOle.MimeMapClass(); TwoMime.Extension = ".xap"; TwoMime.MimeType = "application/x-silverlight-app"; rootEntry.Properties["MimeMap"].Add(NewMime); rootEntry.Properties["MimeMap"].Add(TwoMime); rootEntry.CommitChanges(); 7:下面是做安裝時一段對IIS進行操作的代碼,兼容IIS6及IIS7,新建虛擬目錄并對相應的屬性進行設置,對IIS7還進行新建程序池的程序,并設置程序池的配置 代碼如下: /// <summary> /// 創建網站 /// </summary> /// <param name="siteInfo"></param> public void CreateNewWebSite(NewWebSiteInfo siteInfo) { if (!EnsureNewSiteEnavaible(siteInfo.BindString)) { throw new Exception("該網站已存在" + Environment.NewLine + siteInfo.BindString); } DirectoryEntry rootEntry = GetDirectoryEntry(entPath); newSiteNum = GetNewWebSiteID(); DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer"); newSiteEntry.CommitChanges(); newSiteEntry.Properties["ServerBindings"].Value = siteInfo.BindString; newSiteEntry.Properties["ServerComment"].Value = siteInfo.CommentOfWebSite; newSiteEntry.CommitChanges(); DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir"); vdEntry.CommitChanges(); string ChangWebPath = siteInfo.WebPath.Trim().Remove(siteInfo.WebPath.Trim().LastIndexOf(''\\''),1); vdEntry.Properties["Path"].Value = ChangWebPath; vdEntry.Invoke("AppCreate", true);//創建應用程序 vdEntry.Properties["AccessRead"][0] = true; //設置讀取權限 vdEntry.Properties["AccessWrite"][0] = true; vdEntry.Properties["AccessScript"][0] = true;//執行權限 vdEntry.Properties["AccessExecute"][0] = false; vdEntry.Properties["DefaultDoc"][0] = "Login.aspx";//設置默認文檔 vdEntry.Properties["AppFriendlyName"][0] = "LabManager"; //應用程序名稱 vdEntry.Properties["AuthFlags"][0] = 1;//0表示不允許匿名訪問,1表示就可以3為基本身份驗證,7為windows繼承身份驗證 vdEntry.CommitChanges(); //操作增加MIME #region 針對IIS7 #region 修改應用程序的配置(包含托管模式及其NET運行版本) vdEntry.Properties["AppPoolId"].Value = AppPoolName;
} 代碼如下: string entPath = String.Format("IIS://{0}/w3svc", "localhost"); public DirectoryEntry GetDirectoryEntry(string entPath) public class NewWebSiteInfo public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath) public string BindString public string PortNum public string CommentOfWebSite public string WebPath 8:下面的代碼是對文件夾權限進行設置,下面代碼是創建Everyone 并給予全部權限 代碼如下: /// <summary>
/// 設置文件夾權限 處理給EVERONE賦予所有權限 /// </summary> /// <param name="FileAdd">文件夾路徑</param> public void SetFileRole() { string FileAdd = this.Context.Parameters["installdir"].ToString(); FileAdd = FileAdd.Remove(FileAdd.LastIndexOf(''\\''), 1); DirectorySecurity fSec = new DirectorySecurity(); fSec.AddAccessRule(new FileSystemAccessRule("Everyone",FileSystemRights.FullControl,InheritanceFlags.ContainerInherit|InheritanceFlags.ObjectInherit,PropagationFlags.None,AccessControlType.Allow)); System.IO.Directory.SetAccessControl(FileAdd, fSec); } 該文章在 2018/9/8 15:39:41 編輯過 |
關鍵字查詢
相關文章
正在查詢... |