在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
代码如下: 很显然,这种方法比较复杂,不直观,而且需要停止IIS,影响现有网站。
/// <summary>
/// 本方法创建一个站点(当然,创建虚拟目录也完全没有任何问题,做法类似),并设置IIS中ASP.NET版本为2.0 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { //站点名称和物理路径 String webSiteName = "mengxianhui"; String pathToRoot = @"c:\mengxianhui"; DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");// Find unused ID value for new web site int siteID = 1; //得到现有的站点标识 foreach (DirectoryEntry entry in root.Children) { if (entry.SchemaClassName == "IIsWebServer") { int ID = Convert.ToInt32(entry.Name); if (ID >= siteID) { siteID = ID + 1; } } } //利用配置文件的做法创建站点,需要先停止原来的服务,以便能够顺利写入数据 label1.Text = "正在停止服务……"; Application.DoEvents(); System.ServiceProcess.ServiceController mobServiceController3 = new System.ServiceProcess.ServiceController("IISAdmin"); foreach (System.ServiceProcess.ServiceController dependentService in mobServiceController3.DependentServices) { switch (dependentService.Status) { case ServiceControllerStatus.Stopped: break; case ServiceControllerStatus.StopPending: dependentService.WaitForStatus(ServiceControllerStatus.Stopped); break; default: dependentService.Stop(); dependentService.WaitForStatus(ServiceControllerStatus.Stopped); break; } } if (mobServiceController3.Status != ServiceControllerStatus.Stopped) { mobServiceController3.Stop(); mobServiceController3.WaitForStatus(ServiceControllerStatus.Stopped); } //确保服务完全停止 label1.Text = "停止服务完成!"; Application.DoEvents(); String ConfigPath = System.Environment.SystemDirectory + @"\inetsrv\MetaBase.xml"; System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load(ConfigPath); System.Xml.XmlNamespaceManager xnm = new System.Xml.XmlNamespaceManager(doc.NameTable); xnm.AddNamespace("mxh", "urn:microsoft-catalog:XML_Metabase_V64_0"); //得到最大的网站的标识,要在其后面加入节点 string SiteLocation = "/LM/W3SVC/" + (siteID - 1); System.Xml.XmlNode LastWebServer = doc.SelectSingleNode("/mxh:configuration/mxh:MBProperty/mxh:IIsWebVirtualDir[@Location='" + SiteLocation + "/root']", xnm); if (LastWebServer == null) { MessageBox.Show("没有现有的 Web 服务器。"); doc = null; return; } //找到AdminACL设置,每次都是变化的 -_-! System.Xml.XmlNode LastWebServerFilter = doc.SelectSingleNode("/mxh:configuration/mxh:MBProperty/mxh:IIsFilters[@Location='" + SiteLocation + "/filters']/@AdminACL", xnm); if (LastWebServer == null) { MessageBox.Show("没有现有的 Web 服务器 filters。"); doc = null; return; } String LastWebServerFilterAdminAcl = LastWebServerFilter.Value; //创建新站点 label1.Text = "创建新站点……"; Application.DoEvents(); String NewSiteID = "/LM/W3SVC/" + siteID.ToString(); System.Xml.XmlNode NewWebServer = doc.CreateNode(System.Xml.XmlNodeType.Element, "", "IIsWebServer", "urn:microsoft-catalog:XML_Metabase_V64_0"); System.Xml.XmlAttribute NewWebServerLocation = doc.CreateAttribute("Location"); NewWebServerLocation.Value = NewSiteID; NewWebServer.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("AuthFlags"); NewWebServerLocation.Value = "0"; NewWebServer.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("ServerAutoStart"); NewWebServerLocation.Value = "TRUE"; NewWebServer.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("ServerBindings"); NewWebServerLocation.Value = ":802:"; NewWebServer.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("ServerComment"); NewWebServerLocation.Value = webSiteName; NewWebServer.Attributes.Append(NewWebServerLocation); LastWebServer.ParentNode.InsertAfter(NewWebServer, LastWebServer); System.Xml.XmlNode NewWebServerFilter = doc.CreateNode(System.Xml.XmlNodeType.Element, "", "IIsFilters", "urn:microsoft-catalog:XML_Metabase_V64_0"); NewWebServerLocation = doc.CreateAttribute("Location"); NewWebServerLocation.Value = NewSiteID + "/filters"; NewWebServerFilter.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("AdminACL"); NewWebServerLocation.Value = LastWebServerFilterAdminAcl; NewWebServerFilter.Attributes.Append(NewWebServerLocation); NewWebServer.ParentNode.InsertAfter(NewWebServerFilter, NewWebServer); System.Xml.XmlNode IIsWebVirtualDir = doc.CreateNode(System.Xml.XmlNodeType.Element, "", "IIsWebVirtualDir", "urn:microsoft-catalog:XML_Metabase_V64_0"); NewWebServerLocation = doc.CreateAttribute("Location"); NewWebServerLocation.Value = NewSiteID + "/root"; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("AccessFlags"); NewWebServerLocation.Value = "AccessRead | AccessScript"; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("AppFriendlyName"); NewWebServerLocation.Value = "默认应用程序"; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("AppIsolated"); NewWebServerLocation.Value = "2"; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("AppRoot"); NewWebServerLocation.Value = NewSiteID + "/Root"; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("AuthFlags"); NewWebServerLocation.Value = "AuthAnonymous | AuthNTLM"; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); //关于权限,可以任意组合 NewWebServerLocation = doc.CreateAttribute("DirBrowseFlags"); NewWebServerLocation.Value = "DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc"; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); NewWebServerLocation = doc.CreateAttribute("Path"); NewWebServerLocation.Value = pathToRoot; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); //为安全起见,下面的系统文件夹需要使用程序的方法获取,如System.Environment.SystemDirectory,和System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() //这里为了简单期间,直接写入 string ScriptMaps = @".asp,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE .cer,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE .cdx,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE .asa,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE .idc,C:\WINDOWS\system32\inetsrv\httpodbc.dll,5,GET,POST .shtm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST .shtml,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST .stm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST .asax,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .ascx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .ashx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .asmx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .aspx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .axd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .vsdisco,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .rem,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .soap,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .config,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .cs,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .csproj,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .vb,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .vbproj,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .webinfo,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .licx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .resx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .resources,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .xoml,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .rules,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .master,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .skin,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .compiled,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .browser,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .mdb,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .jsl,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .vjsproj,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .sitemap,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .msgx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .ad,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .dd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .ldd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .sd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .cd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .adprototype,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .lddprototype,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .sdm,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .sdmDocument,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .ldb,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .svc,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG .mdf,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .ldf,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .java,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .exclude,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG .refresh,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"; NewWebServerLocation = doc.CreateAttribute("ScriptMaps"); NewWebServerLocation.Value = ScriptMaps; IIsWebVirtualDir.Attributes.Append(NewWebServerLocation); NewWebServerFilter.ParentNode.InsertAfter(IIsWebVirtualDir, NewWebServerFilter); doc.Save(ConfigPath); doc = null; label1.Text = "创建站点完成!"; mobServiceController3 = null; mobServiceController3 = new System.ServiceProcess.ServiceController("w3svc"); mobServiceController3.Start(); mobServiceController3.WaitForStatus(ServiceControllerStatus.Running); mobServiceController3 = null; label1.Text = "恭喜你,全部工作完成!"; MessageBox.Show("恭喜你,全部工作完成!"); }
|
请发表评论