C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
最近在做一個(gè)WEB程序的安裝包,對(duì)一些操作IIS進(jìn)行一個(gè)簡(jiǎn)單的總結(jié),主要包括對(duì)IIS進(jìn)行站點(diǎn)的新建以及新建站點(diǎn)的NET版本的選擇,還有針對(duì)IIS7程序池的托管模式以及版本的操作。 首先要對(duì)Microsoft.Web.Administration進(jìn)行引用,它主要是用來(lái)操作IIS7: using System.DirectoryServices; 1:首先是對(duì)本版IIS的版本進(jìn)行配置: 代碼如下: 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:刪除應(yīng)用程序池 代碼如下: /// <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:創(chuàng)建應(yīng)用程序池 (對(duì)程序池的設(shè)置主要是針對(duì)IIS7;IIS7應(yīng)用程序池托管模式主要包括集成跟經(jīng)典模式,并進(jìn)行NET版本的設(shè)置) 代碼如下: 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 修改應(yīng)用程序的配置(包含托管模式及其NET運(yùn)行版本) ServerManager sm = new ServerManager(); sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0"; sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated為集成 Classic為經(jīng)典 sm.CommitChanges(); MessageBox.Show(AppPoolName + "程序池托管管道模式:" + sm.ApplicationPools[AppPoolName].ManagedPipelineMode.ToString() + "運(yùn)行的NET版本為:" + sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion); 運(yùn)用C#代碼來(lái)對(duì)IIS7程序池托管管道模式及版本進(jìn)行修改。 5:針對(duì)IIS6的NET版進(jìn)行設(shè)置,因?yàn)榇颂幬沂怯玫絅ET4.0所以V4.0.30319,若是NET2.0則在這進(jìn)行修改 v2.0.50727 代碼如下: //啟動(dòng)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); //啟動(dòng)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:平常我們可能還得對(duì)IIS中的MIME類型進(jìn)行增加,下面主要是我們用到兩個(gè)類型分別是: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:下面是做安裝時(shí)一段對(duì)IIS進(jìn)行操作的代碼,兼容IIS6及IIS7,新建虛擬目錄并對(duì)相應(yīng)的屬性進(jìn)行設(shè)置,對(duì)IIS7還進(jìn)行新建程序池的程序,并設(shè)置程序池的配置 代碼如下: /// <summary> /// 創(chuàng)建網(wǎng)站 /// </summary> /// <param name="siteInfo"></param> public void CreateNewWebSite(NewWebSiteInfo siteInfo) { if (!EnsureNewSiteEnavaible(siteInfo.BindString)) { throw new Exception("該網(wǎng)站已存在" + 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);//創(chuàng)建應(yīng)用程序 vdEntry.Properties["AccessRead"][0] = true; //設(shè)置讀取權(quán)限 vdEntry.Properties["AccessWrite"][0] = true; vdEntry.Properties["AccessScript"][0] = true;//執(zhí)行權(quán)限 vdEntry.Properties["AccessExecute"][0] = false; vdEntry.Properties["DefaultDoc"][0] = "Login.aspx";//設(shè)置默認(rèn)文檔 vdEntry.Properties["AppFriendlyName"][0] = "LabManager"; //應(yīng)用程序名稱 vdEntry.Properties["AuthFlags"][0] = 1;//0表示不允許匿名訪問(wèn),1表示就可以3為基本身份驗(yàn)證,7為windows繼承身份驗(yàn)證 vdEntry.CommitChanges(); //操作增加MIME #region 針對(duì)IIS7 #region 修改應(yīng)用程序的配置(包含托管模式及其NET運(yùn)行版本) 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:下面的代碼是對(duì)文件夾權(quán)限進(jìn)行設(shè)置,下面代碼是創(chuàng)建Everyone 并給予全部權(quán)限 代碼如下: /// <summary>
/// 設(shè)置文件夾權(quán)限 處理給EVERONE賦予所有權(quán)限 /// </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 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |