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

[经验分享] 利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法(一)转自孟子E章

[复制链接]

尚未签到

发表于 2015-8-16 08:00:47 | 显示全部楼层 |阅读模式
  /// <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.yunweiku.com/thread-99532-1-1.html 上篇帖子: 用IIS做宿主的WCF服务 下篇帖子: Delphi WebService 的编写、调试、发布(IIS)、调用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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