源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#操作IIS程序池及站点的创建配置实现代码

  • 时间:2022-04-28 00:27 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#操作IIS程序池及站点的创建配置实现代码
首先要对Microsoft.Web.Administration进行引用,它主要是用来操作IIS7; using System.DirectoryServices; using Microsoft.Web.Administration; [b]1:首先是对本版IIS的版本进行配置:[/b]
[u]复制代码[/u] 代码如下:
DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");             string Version = getEntity.Properties["MajorIISVersionNumber"].Value.ToString();             MessageBox.Show("IIS版本为:" + Version);
[b]2:是判断程序池是存在;[/b]
[u]复制代码[/u] 代码如下:
/// <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;         }
[b]3:删除应用程序池[/b]
[u]复制代码[/u] 代码如下:
/// <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;         }
[b]4:创建应用程序池 (对程序池的设置主要是针对IIS7;IIS7应用程序池托管模式主要包括集成跟经典模式,并进行NET版本的设置)[/b]
[u]复制代码[/u] 代码如下:
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程序池托管管道模式及版本进行修改; [img]http://files.jb51.net/file_images/article/201303/2013329161352458.png[/img] [b]5:针对IIS6的NET版进行设置;因为此处我是用到NET4.0所以V4.0.30319 若是NET2.0则在这进行修改 v2.0.50727[/b]
[u]复制代码[/u] 代码如下:
//启动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();
[b]6:平常我们可能还得对IIS中的MIME类型进行增加;下面主要是我们用到两个类型分别是:xaml,xap[/b]
[u]复制代码[/u] 代码如下:
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();
[b]7:下面是做安装时一段对IIS进行操作的代码;兼容IIS6及IIS7;新建虚拟目录并对相应的属性进行设置;对IIS7还进行新建程序池的程序;并设置程序池的配置;[/b]
[u]复制代码[/u] 代码如下:
/// <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             //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();             #region 针对IIS7             DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");             int Version =int.Parse(getEntity.Properties["MajorIISVersionNumber"].Value.ToString());             if (Version > 6)             {                 #region 创建应用程序池                 string AppPoolName = "LabManager";                 if (!IsAppPoolName(AppPoolName))                 {                     DirectoryEntry newpool;                     DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");                     newpool = appPools.Children.Add(AppPoolName, "IIsApplicationPool");                     newpool.CommitChanges();                 }                 #endregion                 #region 修改应用程序的配置(包含托管模式及其NET运行版本)                 ServerManager sm = new ServerManager();                 sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0";                 sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated为集成 Classic为经典                 sm.CommitChanges();                 #endregion                 vdEntry.Properties["AppPoolId"].Value = AppPoolName;                 vdEntry.CommitChanges();             }             #endregion             //启动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();             if (errors != string.Empty)             {                 throw new Exception(errors);             }         }
[u]复制代码[/u] 代码如下:
string entPath = String.Format("IIS://{0}/w3svc", "localhost"); public  DirectoryEntry GetDirectoryEntry(string entPath)        {            DirectoryEntry ent = new DirectoryEntry(entPath);            return ent;        }         public class NewWebSiteInfo         {             private string hostIP;   // 主机IP             private string portNum;   // 网站端口号             private string descOfWebSite; // 网站表示。一般为网站的网站名。例如"www.dns.com.cn"             private string commentOfWebSite;// 网站注释。一般也为网站的网站名。             private string webPath;   // 网站的主目录。例如"e:\ mp"             public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)             {                 this.hostIP = hostIP;                 this.portNum = portNum;                 this.descOfWebSite = descOfWebSite;                 this.commentOfWebSite = commentOfWebSite;                 this.webPath = webPath;             }             public string BindString             {                 get                 {                     return String.Format("{0}:{1}:{2}", hostIP, portNum, descOfWebSite); //网站标识(IP,端口,主机头值)                 }             }             public string PortNum             {                 get                 {                     return portNum;                 }             }             public string CommentOfWebSite             {                 get                 {                     return commentOfWebSite;                 }             }             public string WebPath             {                 get                 {                     return webPath;                 }             }         }
[b]8:下面的代码是对文件夹权限进行设置,下面代码是创建Everyone 并给予全部权限[/b]
[u]复制代码[/u] 代码如下:
/// <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);         }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部