/// 
/// 本方法创建一个站点(当然,创建虚拟目录也完全没有任何问题,做法类似),并设置IIS中ASP.NET版本为2.0
/// /// 
/// 
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("恭喜你,全部工作完成!");
}