设为首页 收藏本站
查看: 1341|回复: 0

[经验分享] 利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法

[复制链接]

尚未签到

发表于 2015-8-16 14:59:39 | 显示全部楼层 |阅读模式
  /// <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 = "正在停止服务&#8230;&#8230;";
     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 = "创建新站点&#8230;&#8230;";
     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("恭喜你,全部工作完成!");
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-99876-1-1.html 上篇帖子: C#操作IIS回收应用程序池,兼容iis6和iis7 下篇帖子: SharePoint基础之五- SharePoint基础架构中涉及的IIS初步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表